Ссылка на библиотеки 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.