引用dll而不复制它们

本文关键字:复制 dll 引用 | 更新日期: 2023-09-27 18:06:22

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

是否有一种引用dll文件的方法,而不是将它们复制到项目的输出目录,并在运行时与可执行文件一起工作(如Assemblies,如果我没有弄错的话)?

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

有办法吗?

引用dll而不复制它们

实际上您可以将程序集复制到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版本一起过时。