引用 dll 而不复制它们 C#

Referencing dlls without copying them C#

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

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

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

有什么办法吗?

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

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

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