更新生产ASP.NET网站bin文件夹中的DLL

时间:2010-03-31 15:45:05

标签: asp.net deployment assemblies reference fileloadexception

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

但是,当我尝试这个时,我的网站会爆炸,并提供一个FileLoadException,说明程序集清单定义与程序集引用不匹配。这个世界到底是什么?!在Visual Studio中更新DLL并重新部署整个站点工作得很好,但后面是一个巨大的痛苦。如果必须重新部署整个站点以实现任何更改,那么拥有单独的DLL有什么意义呢?

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

3 个答案:

答案 0 :(得分:9)

要记住的是,只要考虑Visual Studio和ASPNET,就有网站网络应用程序

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

另一方面是Web应用程序,其中所有代码隐藏文件都被编译为单个DLL文件,您只需部署您的aspx页面,并将您带有DLL文件的bin文件夹投入生产。

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

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

如果可能,您最好的选择是转换为Web应用程序,因为您可以将其他DLL添加到生产中而不会出现问题。否则,请查看this matrix以查看应用程序所需的预编译形式。

答案 1 :(得分:1)

答案 2 :(得分:0)

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