32

当我发布我的 ASP.NET MVC 应用程序时,它会生成一个 app_offline.htm 文件以在更新网站时使网站脱机,然后在发布成功后删除该文件。

这很酷,我真的很喜欢这个想法,但我想创建我自己的发布操作知道的自定义 app_offline.htm 文件,并将它放在不影响我的开发站点的地方 - 即它不位于我的开发站点的根始终使其离线。

编辑:从Scott Gu 关于 app_offline.htm 的帖子的评论来看,似乎 app_offline.htm 文件的自定义在 VS 2005 中是不可能的——这在 VS 2008 和现在的 VS 2010 中是否发生了变化?

4

9 回答 9

28

我知道这已经过时了,但是自从我在这里查看后找到了解决方案后,我想我应该提供一个答案。VS 11 将发布app_offline.htm文件保存在此位置:

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

我已经对此进行了测试并对其进行了自定义,如果您更改此文件,它确实可以工作。当然,不利的一面是这是用于所有网络发布的文件。

于 2011-11-18T14:10:33.203 回答
17

许多人可能会认为合适的简单解决方案包括简单地将您自己的文件添加"app_offline.htm"到您的解决方案中。

我已经使用 Visual Studio 2015 测试了这种方法,它确实有效。

但是,唯一的缺点是,在发布过程中,首先app_offline.htm复制默认生成的文件,然后按照字母顺序/接近字母顺序复制解决方案文件。

这意味着您的自定义app_offline.htm文件会快速(但不是立即)覆盖系统生成的文件。因此,(丑陋的)系统生成的副本app_offline.htm可能会在启动发布的 1-2 秒窗口内提供给请求,然后再使用您的自定义文件进行更新。

发布过程会自动从远程服务器中删除它app_offline.htm,无论其内容或来源如何。

优点是(超过替换系统副本)是您自己的副本是可移植的,自动特定于解决方案,并且可以与源代码控制一起使用。

我知道这个问题很老,但我希望这有助于其他人应对这个问题。

于 2016-07-07T00:29:41.693 回答
10

我用自己的

app_offline.htm_

解决方案中的文件,该文件将被发布。然后我的部署脚本将其重命名(删除尾随 _)以使其处于活动状态。

然后我可以运行我的数据库脚本/执行任何操作,然后重命名文件以恢复站点。

于 2010-05-18T10:14:38.943 回答
5

安德鲁布洛克的回答就像一个魅力!尽管这取决于您使用的是哪个视觉工作室。

C:\Users\USERNAME\AppData\Roaming\Microsoft\VisualStudio

是您应该首先登陆的目录,选择您的 VS 版本 [8.0/9.0.....] 并编辑app_offile.htm文件。

于 2012-10-18T07:34:24.977 回答
4

的原始内容app_offline.htm确实存储在一个神秘的位置(可能是在其中一个二进制文件中硬编码),但是 Visual Studio 确实在上传之前将内容写入物理文件。

如果您至少发布过一次,则在命令提示符下进行简单搜索dir C:\app_offline.htm /s/a/b应该会找到写入临时文件的位置。它应该是类似的东西C:\Users\username\AppData\Roaming\Microsoft\VisualStudio\16.0_5fc0d832\app_offline.htm。我不确定最后的十六进制字符串是否对于每个安装或用户都相同。

将该文件设置为只读确实可以防止 Visual Studio 覆盖其内容,并且对该文件的修改实际上将在发布期间上传。但是,它会导致内部错误,最终可能会阻止它随着时间的推移上传。

是在构建后事件之前编写的app_offline.htm,因此只需要在 Visual Studio 开始上传之前覆盖它。

更有弹性的方法是执行以下操作:

app_offline.htm1)在您的项目中创建一个自定义。(不在项目的根文件夹中,它会阻止您使用 F5 开始调试。)

2) 使用构建后事件将自定义app_offline.htm从项目文件夹复制到 Visual Studio 的暂存文件夹。

构建后事件命令行:

copy /y "$(ProjectDir)Resources\app_offline.htm" 
"C:\Users\%username%\AppData\Roaming\Microsoft\VisualStudio\16.0_5fc0d832\app_offline.htm"
于 2020-04-01T15:59:03.590 回答
3

您可以使用批处理文件,该文件以当前目录信息作为参数调用编译器...然后复制 app_offline.htm 并复制新文件。从源头运行它。

我个人使用的程序比批处理稍微复杂一些,还检查文件的哈希以确定是否需要更新创建新文件的 zip 并将其提取到远程主机并消除我们指定用于单元测试的文件从测试到生产。我还将 SVN 集成结合到我的解决方案中,因此当您发布测试或生产时,您还可以选择提交到 SVN。该程序存储在网络驱动器上,并使用当前目录信息从本地 PC 上的批处理文件中调用。这样,如果发生任何更改,开发人员就不必更新到新的部署程序或 app_offline。最后,它删除了 app_offline。

查看http://msdn.microsoft.com/en-us/library/system.web.compilation(v=vs.80).aspx了解更多信息或http://msdn.microsoft.com/en-us/ library/ms229863(v=vs.80).aspx如果您只是快速批量制作!

此外,在您最初引用的帖子中,我还验证了您实际上可以更改它,但您也可以使用发布功能为其他人更改它。这就是为什么你得到了你的答案。

于 2011-10-25T03:56:21.380 回答
1

对于 Visual Studio Express 2013 for Web 的用户,该文件位于 C:\Users[user]\AppData\Roaming\Microsoft\VWDExpress\12.0

可以根据您的需要进行修改。

于 2015-03-07T09:32:32.760 回答
0

早在 2006 年,Scott Gu 就表示无法自定义 VS 在 Publish 上生成的文件。

在原始文章中发表评论

我也有兴趣解决这个问题,但我无法在谷歌上找到任何相反的结果。

于 2010-05-17T01:05:09.423 回答
-3

你见过这个吗?

App_Offline.htm

它可能不是(完全)你想要的,但它确实解决了我认为的问题。

于 2010-05-17T01:05:25.180 回答