TFS 2012 Visual Studio插件会在检出文件时立即创建和删除“app_offline.htm”,从而导致ASP.NET AppDomain回收

时间:2013-06-04 14:51:33

标签: visual-studio visual-studio-2012 tfs azure-devops app-offline.htm

我遇到了Visual Studio 2012的问题,这让我很生气。我们正在开发一个ASP.NET Web应用程序,在应用程序启动时,它必须将大量内容加载到内存中。它有时需要20-30才能启动并准备服务第一个http请求。

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

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

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

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

有谁知道为什么TFS会创建这个文件?是否有办法让它停止?

2 个答案:

答案 0 :(得分: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的目录(DIRECTORY!)

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

现在继续使用VS和Team Foundation Server,并且不要经常重新加载appdomain!

答案 1 :(得分:0)

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

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

简单的灵魂可能是直接发布到您的服务器。我相信你不应该,你可以发布到本地文件夹,然后将网站复制到所需的位置。

删除映射(直接发布到服务器)后,我确信当您“签出”文件时,它不会立即创建并删除Web应用程序根目录中的“app_offline.htm”文件。 希望它有所帮助。