Как мне исправить ошибку времени выполнения сборки / файловой зависимости для решения c #?

#c# #.net

#c# #.net

Вопрос:

Я пытаюсь создать плагин для Hearthstone Deck Tracker. Я следовал инструкциям в их репозитории github https://github.com/HearthSim/Hearthstone-Deck-Tracker/wiki/Creating-Plugins . У меня работал прототип, но я хочу поддерживать затухание звука. Для этого мне нужна сторонняя библиотека. Я пошел с NAudio. Я установил его через диспетчер пакетов, используя Install-Package NAudio -Version 1.10.0

Сборка прошла успешно. (Я создаю решение). Однако при запуске через Hearthstone Deck Tracker плагин выдает ошибку привязки. Я видел другие сообщения о fuslogvw.exe , так что я позаботился о том, чтобы запустить это. Это дало мне более подробное сообщение об ошибке, но я все еще не понимаю, как это исправить.

Вот полное сообщение об ошибке:

 System.IO.FileNotFoundException: Could not load file or assembly 'NAudio, Version=1.10.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.
File name: 'NAudio, Version=1.10.0.0, Culture=neutral, PublicKeyToken=null'
   at HsBgSongPlayer.Class1Plugin.OnLoad()
   at Hearthstone_Deck_Tracker.Plugins.PluginWrapper.Load() in D:aHearthstone-Deck-TrackerHearthstone-Deck-TrackerHearthstone Deck TrackerPluginsPluginWrapper.cs:line 93

Assembly manager loaded from:  C:WindowsMicrosoft.NETFrameworkv4.0.30319clr.dll
Running under executable  C:UsersalessAppDataLocalHearthstoneDeckTrackerapp-1.13.15HearthstoneDeckTracker.exe
--- A detailed error log follows. 

=== Pre-bind state information ===
LOG: DisplayName = NAudio, Version=1.10.0.0, Culture=neutral, PublicKeyToken=null
 (Fully-specified)
LOG: Appbase = file:///C:/Users/aless/AppData/Local/HearthstoneDeckTracker/app-1.13.15/
LOG: Initial PrivatePath = NULL
Calling assembly : HsBgSongPlayer, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.
===
LOG: This bind starts in LoadFrom load context.
WRN: Native image will not be probed in LoadFrom context. Native image will only be probed in default load context, like with Assembly.Load().
LOG: Using application configuration file: C:UsersalessAppDataLocalHearthstoneDeckTrackerapp-1.13.15HearthstoneDeckTracker.exe.Config
LOG: Using host configuration file: 
LOG: Using machine configuration file from C:WindowsMicrosoft.NETFrameworkv4.0.30319configmachine.config.
LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind).
LOG: Attempting download of new URL file:///C:/Users/aless/AppData/Local/HearthstoneDeckTracker/app-1.13.15/NAudio.DLL.
LOG: Attempting download of new URL file:///C:/Users/aless/AppData/Local/HearthstoneDeckTracker/app-1.13.15/NAudio/NAudio.DLL.
LOG: Attempting download of new URL file:///C:/Users/aless/AppData/Local/HearthstoneDeckTracker/app-1.13.15/NAudio.EXE.
LOG: Attempting download of new URL file:///C:/Users/aless/AppData/Local/HearthstoneDeckTracker/app-1.13.15/NAudio/NAudio.EXE.
LOG: Attempting download of new URL file:///C:/Users/aless/AppData/Local/HearthstoneDeckTracker/app-1.13.15/Plugins/NAudio.DLL.
LOG: Attempting download of new URL file:///C:/Users/aless/AppData/Local/HearthstoneDeckTracker/app-1.13.15/Plugins/NAudio/NAudio.DLL.
LOG: Attempting download of new URL file:///C:/Users/aless/AppData/Local/HearthstoneDeckTracker/app-1.13.15/Plugins/NAudio.EXE.
LOG: Attempting download of new URL file:///C:/Users/aless/AppData/Local/HearthstoneDeckTracker/app-1.13.15/Plugins/NAudio/NAudio.EXE.
 

На всякий случай, если это имеет значение, вот фрагмент кода, который вызывает ошибку. Он был извлечен из примера кода NAudio для тестирования.

 using System.Threading;
using NAudio.Wave;
...
...
public void OnLoad()
{
  using (var mf = new MediaFoundationReader(Class1.link_gga))
  using (var wo = new WaveOutEvent())
  {
      wo.Init(mf);
      wo.Play();
      while (wo.PlaybackState == PlaybackState.Playing)
      {
          Thread.Sleep(1000);
      }
   }
...
...
 

Я очень новичок в этом, любая помощь будет принята с благодарностью.

Спасибо.

РЕДАКТИРОВАТЬ: решение просто в том, что я должен скопировать NAudio.dll в папку плагинов, где myPlugin.dll существует.

Комментарии:

1. скорее всего, установленная вами версия отличается в вашем файле web.conig/ app.config. Проверьте установленную вами версию по сравнению с тем, что указано в вашем файле конфигурации.

2. @Jawad Я вижу в VS code, что моя установленная NAudio и версия 1.10.0. У меня есть файл packages.config, он содержит правильную версию. Возможно, targetVersion неверен и вызывает ошибку?

3. Проверьте свойства dll в ссылках и убедитесь, что для copylocal установлено значение true

4. @Jawad Да, для ссылки NAudio для локального копирования установлено значение true. Если я скопирую NAudio. dll в ту же папку, что и плагин, с которым он работает. Однако я бы хотел, чтобы он был упакован в мой DLL-файл

5. Не существует такой вещи, как упаковка библиотеки dll внутри другой библиотеки dll. Вы должны скопировать все библиотеки DLL, на которые ссылаются ссылки, чтобы заставить ваш процесс работать