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
,