Каталог не найден исключение или 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");