.NET 需要将所有引用自动 (NuGet) 复制到服务器端的解决方案

本文关键字:复制 NuGet 服务器端 解决方案 引用 NET | 更新日期: 2023-09-27 18:35:15

将我的网站发布到服务器后,我遇到了缺少引用(NuGet[.dll])文件的问题。我通过"右键单击"参考文件夹"中丢失的文件并选择"属性"来解决它,然后将"复制本地"设置为"true",之后一切正常。

问题是:如何将项目设置为始终发布网站并将所有参考文件复制到服务器?

我不需要总是将所有引用的属性设置为"true"。您有任何解决方案可以解决此问题吗?

.NET 需要将所有引用自动 (NuGet) 复制到服务器端的解决方案

有几种方法可以做到这一点,但一般来说,你所做的是大多数人最终做的事情,因为它是最简单的选择。

  1. 您可以将它们设置为"本地复制",这就是您所做的。这反过来意味着依赖的 dll 被复制到工作目录。在运行时和程序集解析时,框架将走的路径之一是当前(执行)目录,如果它可以在那里找到 dll,它将尝试加载它们。为了简化此操作,您可以将所有二进制文件复制到所有项目的通用位置,并将它们的依赖项也复制到该位置(通过将构建路径设置为通用路径,例如..''bin 或其他什么)。至少这样您最终不会多次复制相同的 dll。
  2. 如果这些 dll 已签名,则可以尝试将它们安装到 GAC 中。这是CLR首先要关注的地方之一。如果执行此操作,则只需安装一次,就可以从该计算机上的任何 .NET 应用程序使用它们。
  3. 更复杂的解决方案是将它们放在某个位置的网络共享上,或者放在与应用一起部署的其他文件夹中。不过,这个解决方案非常复杂,因为不仅你会遇到安全问题(可以使用caspol来规避),而且你必须通过侦听适当的事件(我不记得了)来解决程序集加载失败并自己加载它们。这个解决方案并不容易,但有可能。

您还可以对程序集执行其他更高级的操作,例如定义自己的绑定等,但它们不会真正帮助您解决问题。

我建议阅读本文,它应该会让您对可用的选项有一些想法:http://msdn.microsoft.com/en-us/library/yx7xezcf(v=vs.110).aspx