29

我知道在 ASP.NET Web 应用程序中,更改文件bin夹中的 DLL 文件会导致应用程序回收。

但我想知道,正如主题所暗示的那样,是否有任何文件更改会导致这种行为?此方案中是否包含简单的文本文件?

那么子文件夹到bin文件夹呢?以及它们的内容?

我知道我可以自己尝试一下,但更重要的是,我正在为此寻找适当的文档。

4

2 回答 2

44

首先,我无法提供官方文档的链接。但是从我读到的 bin 文件夹(包括子文件夹)中的每一个变化都会导致 IIS 回收应用程序域。

突然的应用程序池回收

  1. 应用程序的 BIN 目录中的任何修改

  2. 在任何配置文件中进行更改,例如 Web.config 或其他文件(如果您的应用程序中有任何特定的配置文件,例如在名为 App_Config 的目录中)。

  3. 在 APP_CODE 目录中的源代码文件中进行修改。这可能会更改任何源代码文件,或者从该目录添加或删除文件。

  4. 在 Global.asax 文件中进行更改

  5. 在 Machine.config 文件中进行更改。

  6. 在 Web 应用程序的根目录中进行任何修改。这意味着动态创建文件/子目录可以导致应用程序池回收。

  7. 修改 App_WebReferences 目录的 Web 服务引用。

  8. 修改根目录中任意目录的安全设置。(例如为每个人或任何其他特定用户或用户组指定读取安全权限。)

这里有一些阅读:

  1. 是什么导致 IIS 中的应用程序池循环使用?
  2. http://christopherdeweese.com/blog2/post/beware-writing-to-the-bin-folder-in-iis-hosted-services
  3. IISReset 有什么作用?
  4. http://www.iis.net/ConfigReference/system.applicationHost/applicationPools/add/recycling
  5. 在 IIS 7.0 中管理、调整和配置应用程序池
  6. http://varunvns.wordpress.com/2011/07/04/application-pool-restarts/
于 2012-03-21T10:55:59.837 回答
1

不,更新 bin 文件夹中的 dll 文件不会导致回收。至少在 IIS 10 及更高版本上没有 .NET 4.7

首先,什么是“回收”?

这是当 IIS 启动一个新的w3wp进程实例并且旧的实例被“礼貌地”终止时(在完成所有注册的请求和后台任务之后IRegisteredObject

更新 /bin 中的文件时会发生什么?

ASP.NET 进行热重载:它检测到更新并从那时起将新版本的 .dll 用于新页面请求。即重新加载“应用程序域”。但这发生在同一个w3wp过程中。(来源

我刚刚在 IIS 10 windows 2016 机器上检查了这一点:启动任务管理器并替换主 .dll 文件 -w3wp进程继续运行,没有任何反应。

于 2020-11-03T22:40:23.547 回答