发布期间自定义app_offline.htm文件

时间:2010-05-17 00:33:38

标签: asp.net asp.net-mvc visual-studio-2010 publish app-offline.htm

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

这很酷,我真的很喜欢这个想法,但我想创建我自己的自定义app_offline.htm文件,该文件是发布操作所知道的,并将其置于不影响我的开发站点的地方 - 即它没有' t坐在我的开发站点的根目录中,一直让它脱机。

编辑:从Scott Gu's post about app_offline.htm的评论来看,似乎无法使用VS 2005自定义app_offline.htm文件 - 这已经因VS 2008和现在的VS 2010而改变了吗?

9 个答案:

答案 0 :(得分:24)

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

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

我已对此进行了测试并对其进行了自定义,如果您更改此文件,它确实有效。当然,缺点是这是用于所有网络发布的文件。

答案 1 :(得分:11)

许多人认为合适的简单解决方案只需将您​​自己的名为"app_offline.htm"的文件添加到您的解决方案中。

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

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

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

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

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

我知道这个问题已经过时了,但我希望这有助于其他人解决这个问题。

答案 2 :(得分:9)

我使用自己的

app_offline.htm_

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

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

答案 3 :(得分:3)

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

我个人使用的程序比批处理更精细,并检查文件的哈希值,以确定是否需要更新会生成新文件的zip并将其提取到远程主机并删除我们指定的文件从测试到生产的单元测试。我还将SVN集成结合到我的解决方案中,因此当您发布测试或生产时,您还可以选择提交到SVN。程序存储在网络驱动器上,并使用当前目录信息从本地PC上的批处理文件调用。这种方式如果发生任何更改,dev不必更新到新的部署者或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

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

答案 4 :(得分:3)

安德鲁公牛的回答就像一个魅力!虽然这取决于你使用的是哪个视觉工作室。

  

C:\ Users \用户名\应用程序数据\漫游\微软\ VisualStudio的

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

答案 5 :(得分:3)

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开始上载之前将其覆盖。

一种更具弹性的方法是执行以下操作:

1)在您的项目中创建自定义app_offline.htm(不在项目的根文件夹中,这将阻止您使用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"

答案 6 :(得分:1)

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

可以根据您的需要修改。

答案 7 :(得分:0)

早在2006年,Scott Gu就说没有办法自定义VS在Publish上生成的文件。

Comment within original article

我也有兴趣解决这个问题,但我无法在谷歌上发现任何明确相反的内容。

答案 8 :(得分:-3)

你见过这个吗?

App_Offline.htm

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