Каталог не найден исключение или FileNotFoundException на VLC.Dotnet ограничителя
использование библиотеки VLC, предоставляемой Vlc.DotNet, я попытался реализовать его в простом WPF.
Я скопировал точно код из репозитория и получил NuGet онлайн, но, похоже, не могу заставить его работать. Я получаю Каталог, не найденный исключением прямо из загрузки файла на диске.
вот мой код:
public MainWindow()
{
InitializeComponent();
VLCControl.MediaPlayer.VlcLibDirectoryNeeded += OnVlcControlNeedsLibDirectory;
}
private void OnVlcControlNeedsLibDirectory(object sender, Vlc.DotNet.Forms.VlcLibDirectoryNeededEventArgs e)
{
var currentAssembly = Assembly.GetEntryAssembly();
var currentDirectory = new FileInfo(currentAssembly.Location).DirectoryName;
if (currentDirectory == null)
return;
if (AssemblyName.GetAssemblyName(currentAssembly.Location).ProcessorArchitecture == ProcessorArchitecture.X86)
e.VlcLibDirectory = new DirectoryInfo(System.IO.Path.Combine(currentDirectory, @"......libx86"));
else
e.VlcLibDirectory = new DirectoryInfo(System.IO.Path.Combine(currentDirectory, @"......libx64"));
}
private void Button_Click(object sender, RoutedEventArgs e)
{
var d = new Microsoft.Win32.OpenFileDialog();
d.Multiselect = false;
if (d.ShowDialog() == true)
{
Uri src = new Uri(d.FileName);
VLCControl.MediaPlayer.Play(src); //Exception here
}
}
VLCControl является элементом управления VLC в xaml.
изменение VlcLibDirectory
с другим путем, где я положил библиотеки (например, корень приложения), я получаю этот StackTrace:
в Vlc.Dotnet ограничителя.Ядро.Interops.VlcInteropsManager..ctor (DirectoryInfo dynamicLinkLibrariesPath) в Vlc.Dotnet ограничителя.Ядро.Interops.VlcManager..ctor (DirectoryInfo dynamicLinkLibrariesPath) в Vlc.Dotnet ограничителя.Ядро.Interops.VlcManager.GetInstance (DirectoryInfo dynamicLinkLibrariesPath) в Vlc.Dotnet ограничителя.Ядро.VlcMediaPlayer..ctor (DirectoryInfo vlcLibDirectory) в Vlc.Dotnet ограничителя.Формы.VlcControl.EndInit() в Vlc.Dotnet ограничителя.Формы.VlcControl.Воспроизведение (Uri uri, String[] options) в VLCTest.Файл MainWindow.Button_Click (отправитель объекта, RoutedEventArgs e) в c:UsersMEDocumentsVisual студия 2013проектыVLCTestVLCTestMainWindow.код XAML.cs: ligne 56
код выглядит так :
if(AssemblyName.GetAssemblyName(currentAssembly.Location).ProcessorArchitecture == ProcessorArchitecture.X86)
e.VlcLibDirectory = new DirectoryInfo(currentDirectory);
else
e.VlcLibDirectory = new DirectoryInfo(currentDirectory);
Спасибо за помощь.
1 ответов
проблема определенно связана с вашим библиотечным путем, хотя вам нужно отладить проблему самостоятельно, чтобы найти точное несоответствие между предоставленным путем и фактическим путем.
может быть недоразумение, какие библиотеки отсутствуют. У вас есть Vlc.DotNet.Core.Interops.dll
но у вас отсутствуют библиотеки nativ позади. Именно по этой причине происходит исключение внутри Vlc.DotNet.Core.Interops.dll
когда он пытается загрузить фактические библиотеки.
на - это внутри VLCControl.MediaPlayer.Play(src);
, поэтому путь от OpenFileDialog не имеет ничего общего с проблемой.
шаги, которые я предпринял для воспроизведения / исправления:
- скачал ваш проект
- Тестирование / Отладка
- исключение произошло, как вы описываете
- скачал библиотеки из Vlc.Репозиторий dotnet ограничителя
- изменены пути к абсолютным значениям
- Тестирование / Отладка снова
- успешно воспроизведен музыкальный файл
- еще одно исключение произошло при закрытии (другая история alltogether)
мой макет папки:
путь решения:
D:\Programmierung\VLCTest-VAlphaTesting\VLCTest-VAlphaTesting\
фактическое расположение сборки на execute
D:\Programmierung\VLCTest-VAlphaTesting\VLCTest-VAlphaTesting\VLCTest\bin\Debug
ProcessorArchitecture: x86
Путь К Библиотеке:
D:\Programmierung\Vlc.DotNet-master\Vlc.DotNet-master\lib\x86
содержимое пути библиотеки:
Плагины (папка)
.keep (file)
libvlc.dll файлы (файл)
libvlccore.файл DLL (файл)
для целей тестирования я жестко путь к Библиотеке - вы можете сделать это
if (AssemblyName.GetAssemblyName(currentAssembly.Location).ProcessorArchitecture == ProcessorArchitecture.X86)
e.VlcLibDirectory = new DirectoryInfo(@"D:\Programmierung\Vlc.DotNet-master\Vlc.DotNet-master\lib\x86");
else
e.VlcLibDirectory = new DirectoryInfo(@"D:\Programmierung\Vlc.DotNet-master\Vlc.DotNet-master\lib\x64");