更新ASP.NET Web应用程序DLL的最佳方法是什么?

3

我有一个包含在/bin文件夹下的DLL文件 'Example.dll' 的ASP.NET Web应用程序。如果在Web.config中没有提到 'Example.dll',那么直接用较新版本的 'Example.dll' 替换它是否安全?

如果不安全,需要哪些步骤?

2个回答

4
是的,这是安全的(假设您小心并且没有进行任何破坏性的更改),但是这里有一个我从惨痛经历中学到的提示:不要在同一个文件夹内备份旧版本。即使您将其重命名为Example.dll0之类的东西,它仍可能会让框架感到困惑。
此外,这样做会重新启动应用程序。

根据我的经验,这很容易导致“FileLoadException”错误,错误信息为“无法加载文件或程序集之一。定位的程序集清单定义与程序集引用不匹配。”事实上,就在前几天我尝试替换一个DLL时遇到了这个问题,最终不得不重新部署整个应用程序。我认为这取决于您的部署策略。例如,在这种情况下,应用程序是预编译的。 - Josh Stodola
我从未经历过这种情况,Josh,我的所有应用程序都是预编译的。但是,我猜如果它在进程中间,并且它(出于任何原因)想要在回收应用程序之前完成,那么可能会发生这种情况。一旦应用程序重新启动,我看不出为什么它会寻找旧的DLL。 - pdr
我放入了新的DLL(没有任何更改会导致编译错误),但我的应用程序完全停止工作,并且事件查看器中有几条这样的消息(每个后续请求一个)。重新部署整个应用程序解决了问题。这种情况恰好发生在上周五。 - Josh Stodola
您可以通过清理 ASP.net 缓存(位于 C:\windows\Microsoft.net\Framework(64)\v4.0.30319\Temporary ASP.net Files)并重启应用程序池来解决此问题。 - Remi Lemarchand

1

替换 DLL 将触发应用程序域(整个 Web 应用程序)重新启动,使用此 DLL 的任何代码将在重新启动后使用新版本。当前对旧版本的请求将完成,然后关闭。

因此,不需要额外的步骤,只需注意应用程序将重新启动。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接