引用 dll 而不复制它们 C#

2024-03-25

当我们创建一个新的C#项目并引用一个dll时,该dll在编译项目时会被复制到项目的输出目录中。

有没有一种方法可以引用 dll 文件而不将它们复制到项目的输出目录,并让可执行文件在运行时使用它们(类似于Assemblies如果我没错的话)?

我尝试访问参考 dll 的属性,并更改了Copy Local to False但它没有帮助(可能是因为该 dll 依赖于该 dll 目录中的其他 dll)。

有什么办法可以做到这一点吗?


实际上你可以将程序集复制到GAC https://en.wikipedia.org/wiki/Global_Assembly_Cache但这并不总是一个理想的解决方案。

您必须记住,复制到 GAC 的每个程序集都必须是强命名。如果您的项目使用一些 NuGet 包,那么将所有这些包安装到 GAC 中将会出现问题。我相信这也不是使用 NuGet 的目的。

另一种选择是从默认的不同目录加载 DLLbin文件夹使用<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 版本而过时。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

引用 dll 而不复制它们 C# 的相关文章

随机推荐