2

我对 Visual Studio 2012 有疑问,这让我发疯。我们正在开发一个 ASP.NET Web 应用程序,在应用程序启动时,它必须将很多东西加载到内存中。它有时需要 20 到 30 分钟才能启动并准备好为第一个 http 请求提供服务。

我们正在使用 TFS 源代码控制,基本上,每次有人编辑文件时,TFS 都会将该文件标记为“已签出”(解决方案资源管理器中的文件名图标旁边出现红色小复选标记)并立即创建和删除一个“ app_offline.htm" 文件位于 Web 应用程序的根目录中。

这会导致 Web 应用程序卸载。我使用记录 Application_Start 和 Application_End 事件来发现这一点。然后我使用 SysInternals Process Monitor 查看正在发生的活动。当我看到 procmon 的神秘输出中提到了 app_offline.htm 时,我使用了一个名为 Directory Monitor 的单独文件系统观察程序,它确认 app_offline.htm 确实被创建并立即删除。

这样做的连锁反应是,如果您要进行一些更改,则应用程序必须在开发过程中多次卸载/重新加载。这是在浪费时间。

不仅如此,应用程序域的不断重新加载会导致 IIS 最终耗尽内存,然后我们必须执行 IISRESET。

有谁知道为什么 TFS 创建这个文件?是否有任何方法可以让它停止?

4

2 回答 2

4

我发现了一种解决方法。

1) 转到 Visual Studio 缓存 app_offline.htm 文件的位置 C:\Users[user]\AppData\Roaming\Microsoft\VisualStudio\11.0\(将 [user] 替换为您的用户名)

2)删除app_offline.htm文件

(注意:仅此一项并不能解决它,因为 VS 在找不到文件时会再次重新生成文件)

3) 创建一个名为 app_offline.htm 的目录(一个目录!)

这实质上会导致尝试使用该文件的进程出错,因为它不是文件,并且名称冲突意味着 VS 无法尝试重新创建该文件。幸运的是,该错误没有不必要的副作用。

现在继续使用 VS 和 Team Foundation Server,享受不经常重新加载 appdomain 的乐趣!

于 2013-06-05T06:40:47.207 回答
0

如果您将从 Visual Studio 发布到 IIS 下的目录,那么它就会发生。VS 2012 将该文件保存在该位置下

C:\Users\[user]\AppData\Roaming\Microsoft\VisualStudio\11.0\app_offline.htm

最简单的方法可能是直接发布到您的服务器。而且我相信您不应该,您可以发布到本地文件夹,然后将站点复制到所需位置。

一旦您删除了映射(直接发布到服务器),那么我确信当您“签出”一个文件时,它不会立即在 Web 应用程序的根目录中创建和删除一个“app_offline.htm”文件。希望能帮助到你。

于 2013-06-04T15:03:35.990 回答