【问题标题】:TFS 2012 Visual Studio plug-in instantly creates and deletes "app_offline.htm" whenever a file is checked out causing the ASP.NET AppDomain to recycle每当签出文件导致 ASP.NET AppDomain 回收时,TFS 2012 Visual Studio 插件会立即创建和删除“app_offline.htm”
【发布时间】:2013-06-04 14:51:33
【问题描述】:

我在使用 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 创建这个文件?有没有办法让它停下来?

【问题讨论】:

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


    【解决方案1】:

    我发现了一个解决方法。

    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 的乐趣!

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

      • 您好,我没有发布应用程序。只是开发它。我已经尝试从您提到的位置删除 app_offline.htm 文件,但不幸的是系统重新创建了它。
      • 你用Visual Studio直接在IIS下发布文件吗?
      • 您好,根本没有发布,只是 IIS 像往常一样指向源目录。谢谢
      • 您可以使用进程监视器来检查,因为它可能是一些其他程序,如杀毒等,您可以在这里找到进程监视器technet.microsoft.com/en-us/sysinternals/bb896645.aspx
      • 是的,在 procmon 中,看起来 TFS 以某种方式在根目录中创建 app_offline.htm 文件,触发 ASP.NET/IIS 卸载应用程序域,然后重新加载它。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-17
      • 1970-01-01
      • 2014-04-07
      • 1970-01-01
      • 2017-12-19
      • 2014-03-23
      • 1970-01-01
      相关资源
      最近更新 更多