C# - DLL-библиотека "Ресурсы" не может быть загружена, поскольку она не существует - Как я могу найти ссылку, чтобы я мог удалить ее?

У меня есть решение C#, которое выкладывает исполняемый двоичный файл при компиляции. Двоичный файл зависит от библиотеки, которая является продуктом другого решения, которое я написал, весь код, который я создал.

Недавно я довольно беспорядочно поиграл с несколькими настройками проекта, пытаясь понять, как работает CLR при создании ссылок. К сожалению (как и ожидалось?) Мне удалось разорвать связь в моем бинарном файле, но я не уверен, как решить проблему.

  • Когда я бинарный, я получаю следующий отзыв до того, как приложение упадет

Загрузка сборок........ Не удалось добавить типы в сборку MY.Library, Версия =1.0.0.0, Culture= нейтральный, PublicKeyToken=null - Невозможно загрузить один или несколько запрошенных типов. Получите свойство LoaderExceptions для получения дополнительной информации

  • Журнал объединения для библиотеки MY.Library.resources находится ниже. Упомянутый бинарный файл не существует, и я не знаю, где и почему он пытается загрузиться.

>

All probing URLs attempted and failed

*** Assembly Binder Log Entry  (22/04/2011 @ 10:34:17) ***

The operation failed. Bind result: hr
= 0x80070002. The system cannot find the file specified.

Assembly manager loaded from:  C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll Running under executable  G:\SVN\dev\Debug\MYExecutable.exe
--- A detailed error log follows. 

=== Pre-bind state information === LOG: User = UBERIT\gavina LOG: DisplayName = MY.Library.resources, Version=1.0.0.0, Culture=en, PublicKeyToken=null  (Fully-specified) LOG: Appbase = file:///G:/SVN/dev/Debug LOG: Initial PrivatePath = x64 LOG: Dynamic Base = NULL LOG: Cache Base = NULL LOG: AppName = MYExecutable.exe Calling assembly : MY.Library, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.
=== LOG: This bind starts in default load context. 
LOG: Using application configuration file: G:\BuildSVN\apps\ExecSys\MYExecutable\dev\Debug\MYExecutable.exe.Config LOG: Using host configuration file:  LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.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:///G:/SVN/dev/Debug/en/MY.Library.resources.DLL. 
LOG: Attempting download of new URL file:///G:/SVN/dev/Debug/en/MY.Library.resources/MY.Library.resources.DLL. 
LOG: Attempting download of new URL file:///G:/SVN/dev/Debug/x64/en/MY.Library.resources.DLL. 
LOG: Attempting download of new URL file:///G:/SVN/dev/Debug/x64/en/MY.Library.resources/MY.Library.resources.DLL. 
LOG: Attempting download of new URL file:///G:/SVN/dev/Debug/en/MY.Library.resources.EXE. LOG: Attempting download of new URL file:///G:/SVN/dev/Debug/en/MY.Library.resources/MY.Library.resources.EXE. 
LOG: Attempting download of new URL file:///G:/SVN/dev/Debug/x64/en/MY.Library.resources.EXE. 
LOG: Attempting download of new URL file:///G:/SVN/dev/Debug/x64/en/MY.Library.resources/MY.Library.resources.EXE. 
LOG: All probing URLs attempted and failed.
  • Являются ли "ресурсы" DLL неявными? Или у меня обязательно есть ссылка на эту DLL? Как мне найти ссылку в SLN для библиотеки?

TL; DR

  • Как удалить ссылку на несуществующую библиотеку ресурсов?

3 ответа

  • Являются ли "ресурсы" DLL неявными? Или у меня обязательно есть ссылка на эту DLL? Как мне найти ссылку в SLN для библиотеки?
  • Как удалить ссылку на несуществующую библиотеку ресурсов?

Ресурсы на самом деле встроены в вашу DLL. Вам не нужно ссылаться на это.
Причина, по которой вы видите "library.resouce", заключается в том, что ваш код просит.net загрузить сборку вручную, через событие app.config или AppDomain.AssemblyResolve.

В твоем случае я думаю, что это последнее. Просто найдите этот обработчик событий и сделайте что-то вроде этого:

static System::Reflection::Assembly^ HandleAssemblyResolveEvent(System::Object^ sender, System::ResolveEventArgs^ args)
{
    System::String^ assemblyName = args->Name->Substring(0, args->Name->IndexOf(","));
    if(assemblyName->EndsWith(".resources")) return nullptr;
}

Код находится на C++\CLI, но его легко перевести на C#.

У меня просто была такая проблема, Visual Studio 2010 не могла найти все виды ресурсов dll, таких как xaml.resources.dll и presentationcore.resources.dll. Оказывается (в конце концов) это было результатом того, что я переместил MainWindow.xaml в подпапку. Я не знаю, то же самое ли с оконными формами, но всем, кто занимается WPF: НЕ ПЕРЕМЕЩАТЬ MainWindow.xaml. Еще один день моей жизни потерян.

Обычно ваши библиотеки DLL, на которые ссылаются, должны быть в References папку в вашем проекте C# (вы также должны добавить туда свои внешние DLL). Вы можете щелкнуть правой кнопкой мыши DLL, которую вы хотите удалить, и нажмите Remove,

Другие вопросы по тегам