13

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

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

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

4

3 回答 3

10

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

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

另一端是 Web 应用程序,您的所有文件背后的代码都被编译为单个 DLL 文件,您只需部署您的 aspx 页面并将包含 DLL 文件的 bin 文件夹用于生产。

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

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

如果可能,最好的办法是转换为 Web 应用程序,因为您可以毫无问题地将额外的 DLL 添加到生产环境中。否则,请查看此矩阵以了解您的应用程序需要哪种形式的预编译。

于 2010-03-31T18:44:06.767 回答
1

看看这个 SO 帖子,可能就是你所指的。找到的程序集的清单定义与程序集引用不匹配

于 2010-03-31T15:53:04.233 回答
0

看看你的参考。它是否说“特定版本= true”?将其设置为 false,重新发布您的应用程序(您必须执行一次,因为现在您的应用程序仍在寻找具有特定清单的程序集)并重试。

于 2010-03-31T16:01:56.597 回答