Ссылка на библиотеки DLL без их копирования C#

Когда мы создаем новый проект C# и ссылаемся на dll, dll копируется в выходную директорию проекта при компиляции проекта.

Есть ли способ ссылаться на dll-файлы и не копировать их в выходной каталог проекта, и иметь исполняемый файл с ними работать, когда он запускается (что-то вроде Assemblies если я не ошибаюсь)?

Я попытался получить доступ к свойствам справочной библиотеки DLL и изменил Copy Local в False но это не помогло (вероятно, потому что эта dll зависит от других dll, расположенных в каталоге dll).

Есть ли способ сделать это?

1 ответ

Решение

На самом деле вы можете скопировать ваши сборки в GAC, но это не всегда идеальное решение.

Вы должны помнить, что каждая сборка, скопированная в GAC, должна иметь строгое имя. Если ваши проекты используют несколько пакетов NuGet, было бы проблемой установить все эти пакеты в GAC. Я считаю, что это не цель использования NuGet.

Другим вариантом будет загрузка ваших DLL из другого каталога, который по умолчанию bin использование папки <codeBase> тег в вашей конфигурации:

<configuration>
<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
     <dependentAssembly>
        <assemblyIdentity name="MyAssembly2"  culture="neutral" publicKeyToken="307041694a995978"/>
        <codeBase version="1.0.1524.23149" href="FILE://C:/Myassemblies/MyAssembly2.dll"/>
     </dependentAssembly>
  </assemblyBinding>
</runtime>
</configuration>

но насколько я помню это возможно во время выполнения.

РЕДАКТИРОВАТЬ: Поскольку ваша проблема заключается в том, что вы должны ссылаться на SDK, который находится в стадии разработки, я думаю, что ни GAC, ни codeBase буду работать. Во-первых, это проблема управления версиями (вы должны ссылаться на конкретную версию SDK), во-вторых, вы всегда должны перекомпилировать свой инструмент после нового выпуска SDK, поскольку в вашей сборке хранятся некоторые метаданные, которые могут быть устаревшими в новой версии SDK.

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