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

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

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

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

Загрузка сборок ........ Не удалось добавить типы в сборку. MY.Library, версия = 1.0.0.0, культура = нейтральная, 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-библиотеки 'Resources' неявными?Или у меня обязательно есть ссылка на эту DLL?Как найти ссылку в SLN для библиотеки?

TL; DR

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

Ответы [ 3 ]

3 голосов
/ 13 декабря 2011
  • Являются ли DLL-библиотеки 'Resources' неявными?Или у меня обязательно есть ссылка на эту 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 #.

1 голос
/ 19 сентября 2011

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

0 голосов
/ 22 апреля 2011

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

...