3

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

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

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

有没有办法做到这一点?

4

1 回答 1

2

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

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

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

于 2015-08-05T10:11:57.990 回答