我想更新生产 Web 应用程序中的类库(单个 DLL 文件)。该网络应用程序已预编译(已发布)。我在 StackOverflow 上读到了一个答案(抱歉,似乎找不到它了,因为搜索功能不能很好地工作),这让我相信我可以将新的 DLL 粘贴到 bin 文件夹中,然后它就会被选中没有问题(这会导致 WP 回收,这对我来说没问题,因为我们不使用 InProc 会话状态)。

但是,当我尝试此操作时,我的网站崩溃并给出 FileLoadException,指出程序集清单定义与程序集引用不匹配。这到底是什么?!在 Visual Studio 中更新 DLL 并重新部署整个站点工作得很好,但后面却是一个巨大的痛苦。如果必须重新部署整个站点才能实现任何更改,那么拥有单独的 DLL 有何意义?

这是问题:如何在不破坏应用程序且不重新部署所有文件的情况下更新生产网站上的 DLL?

有帮助吗?

解决方案

要记住的是,有 网站网络应用程序 就 Visual Studio 和 ASPNET 而言。

网站通常将所有 aspx 和 vb 文件发布到实时服务器,并且 ASPNET Worker Process 每次在演示之前都会重新编译应用程序。

另一端是 Web 应用程序,其中所有代码隐藏文件都被编译为单个 DLL 文件,您只需将您的 aspx 页面和包含 DLL 文件的 bin 文件夹部署到生产环境即可。

还有一种“混合体”,称为“预编译网站”(请参阅​​官方 MSDN 概述的链接),您没有 Web 应用程序的单个 DLL 布局,但网站的所有编译工作都为您完成。根据您的需要,有多种“模式”。

在我看来,您的错误是由于您的网站被设置为带有某种预编译的网站而引起的。使用预编译模型更加“严格”,因为它假设某些文件/签名已就位。DLL 文件的更新版本会导致中断,因为预编译需要文件的名称和版本。

如果可能的话,最好的选择是转换为 Web 应用程序,因为您可以毫无问题地将附加 DLL 添加到生产中。否则,请看一下 这个矩阵 查看您的应用程序需要哪种形式的预编译。

其他提示

看这个SO后,可能你指的是什么。 找到的程序集清单定义不匹配组件参考

看一看你参考。它说:“具体的版本=真”?其设置为false,发布您的应用(你必须这样做一次,因为现在你的应用仍在寻找一个组件与特定的清单),并再次尝试。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top