引用dll而不复制它们C#

时间:2015-08-05 10:07:16

标签: c# dll reference assemblies copy-local

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

是否有一种方法可以引用dll文件而不是将它们复制到项目的输出目录中,并且可执行文件在运行时可以使用它们(如果我是Assemblies,则可以使用Copy Local。我没弄错)?

我尝试访问参考dll的属性,并将False更改为(?:pattern),但它没有帮助(可能是因为该dll取决于位于其中的其他dll dll的目录)。

有没有办法做到这一点?

1 个答案:

答案 0 :(得分:2)

实际上,您可以将程序集复制到GAC,但这并不总是理想的解决方案。

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

另一种选择是在配置中使用bin标记从默认<codeBase>文件夹的不同目录加载DLL:

<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版本而过时。