Скопировать локальный = ложный файл не найден исключение проблема

Привет, я знаю, что это спросили, но он не получил ответа. У меня проблема, когда я хочу использовать DLL, установленную на C:\Program Files (x86)\Dummu_API.dll

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

Не удалось загрузить файл или сборку 'Dummy_API, Version=1.0.0.0, Culture= нейтральный, PublicKeyToken=null' или одну из ее зависимостей. Система не может найти указанный файл.

У моего проекта есть ссылка Копировать локально = ложь и конкретная версия = ложь. Мой проект также является целевой платформой x86.

Я не знаю, почему мое приложение не находит сборки. Есть идеи, что это происходит?

3 ответа

Решение

Опция 1

Вы можете сообщить своему заявлению, что сами решите Ассамблеи, если они не найдены в ссылках. Для этого:

В ваших приложениях основной метод прикрепите ассемблер разрешения:

AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;

Убедитесь, что вы не используете динамически разрешенную сборку в вашем основном методе.

Ваш код метода распознавателя (здесь вы загружаете сборку - посмотрите на ResolveEventArgs. Я только что жестко запрограммировал один, но вы можете разрешить различные сборки здесь из разных мест)

static System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
    return Assembly.LoadFile(@"C:\temp\ClassLibrary1.dll");
}

Вариант 2

Добавьте это в ваш app.config (работает только для подпапок каталога приложения)

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
     <probing privatePath="PathToMyAssemblies\" />
  </assemblyBinding>
</runtime>

Таким образом, файл не находится в GAC, и нет локальной копии. Вы исключили только два места, из которых он мог загружаться - я не знаю, почему вы ожидаете, что это сработает.

Вам нужно установить Copy Local=true или установить Dummy_API.dll в глобальный кэш сборок на компьютере, на котором будет выполняться ваш код. Один или другой.

Я не знаю, правильно ли вы выбрали тип проекта, как по мне, я обнаружил, что в самом начале выбрал проект типа dot net core (консольное приложение), затем я переместил проект на dot net framework(консольное приложение), и у меня это работает.

Есть еще один быстрый способ проверить, есть ли у вас та же проблема, что и у меня:

  1. После того, как вы создали элемент app.config и скомпилировали его, вы нашли .dll.config, но не .exe.config
  2. Вкладка "Справочная информация" заменена вкладкой "Dependencys"
  3. Выбор структуры свойств проекта может быть только core xx или net 5.0, но не framework 3.0 / 4.0 / 4.5 и т. Д.

Просто намек или подсказка, надеюсь, помогли!

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