当我们新建一个 C# 项目并引用一个 dll 时,该 dll 会在编译项目时复制到项目的输出目录中。
有没有办法引用 dll 文件而不是将它们复制到项目的输出目录,并在运行时让可执行文件与它们一起工作(Assemblies
如果我没记错的话)?
我尝试访问引用 dll 的属性,并将其更改Copy Local
为False
但没有帮助(可能是因为该 dll 取决于位于 dll 目录中的其他 dll)。
有没有办法做到这一点?
当我们新建一个 C# 项目并引用一个 dll 时,该 dll 会在编译项目时复制到项目的输出目录中。
有没有办法引用 dll 文件而不是将它们复制到项目的输出目录,并在运行时让可执行文件与它们一起工作(Assemblies
如果我没记错的话)?
我尝试访问引用 dll 的属性,并将其更改Copy Local
为False
但没有帮助(可能是因为该 dll 取决于位于 dll 目录中的其他 dll)。
有没有办法做到这一点?
实际上,您可以将程序集复制到GAC,但这并不总是一个理想的解决方案。
您必须记住,复制到 GAC 的每个程序集都必须是强命名的。如果您的项目使用了一些 NuGet 包,那么将所有这些包安装到 GAC 中会出现问题。我相信这也不是使用 NuGet 的目的。
另一种选择是使用配置中的标记从默认bin
文件夹的不同目录加载您的 DLL :<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 版本而过时。