当我们创建一个新的C#项目并引用一个dll时,在编译项目时会将dll复制到项目的输出目录。
是否有一种方法可以引用dll文件而不是将它们复制到项目的输出目录中,并且可执行文件在运行时可以使用它们(如果我是Assemblies
,则可以使用Copy Local
。我没弄错)?
我尝试访问参考dll的属性,并将False
更改为(?:pattern)
,但它没有帮助(可能是因为该dll取决于位于其中的其他dll dll的目录)。
有没有办法做到这一点?
答案 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版本而过时。