使用subversion进行asp.net部署 - 导致appdomain回收

时间:2009-01-31 10:41:32

标签: asp.net svn deployment

我正在尝试使用subversion将更新部署到我的ASP.Net应用程序,我面临的一个问题是每当更新工作副本(包含构建版本)时,bin中的“.svn”文件夹都会更新并且这会导致ASP.Net appdomain回收。我不希望这种情况发生,除非bin中的某些内容实际发生了变化。

有没有办法告诉ASP.Net忽略bin中的“.svn”文件夹?基本上不是在观察该文件夹进行更改吗?

如果这不起作用,我将使用web文件夹之外的暂存文件夹将构建下载到服务器上,然后使用脚本来修补/更新实际的Web文件夹。

[编辑:] svn导出选项不会将我的部署保留在版本控制之下,我希望能够在Web文件夹上执行“svn update”以部署和回滚版本。

7 个答案:

答案 0 :(得分:5)

如果您使用svn export代替svn checkout从您的存储库获取文件,则不会在服务器上获取.svn文件夹。

[编辑]另一个选项是从存储库中删除“bin”(如果需要修订,可能会将其提交到另一个),然后只需在bin变更时手动将bin目录复制到webroot。记得在你的svn-ignore-list中添加“bin”。

答案 1 :(得分:1)

您可能希望将“Bin”目录添加到svn:ignore列表中;它不应该被提交,因为它包含已编译的代码,而不是源代码。

在任何情况下,作为您的最终部署,“svn export”可能是更好的选择,正如其他人所指出的那样。

答案 2 :(得分:1)

您是否考虑过使用Continuous Integration服务器?

持续集成基本上是指一种旨在提高存储库提交频率的开发实践。

您提交的回滚次数越多,提交的次数越多,提交次数越少。

下面列出的工具都可以与subversion一起使用,并且可以与服务器上的MSBuild结合使用,以生成自动构建&部署系统。

MSBuild指令包括在复制到实时目录时忽略某些文件(即代码隐藏)的选项。此外,您可能希望某些文件具有开发版本和实时版本......在这种情况下,我们应该为MSBuild编写一个“转换”脚本,以确保在实时复制时该文件对于实时服务器是正确的。 (即web.config)

哈德森 - http://java.net/projects/hudson/

德拉科 - http://draconet.sourceforge.net/

CruiseControl - http://cruisecontrol.sourceforge.net/

答案 3 :(得分:0)

很遗憾,如果您这样做,那么当您遇到App Domain重启时,您将会这样做。因此,除非你像Espo所说的那样并使用svn export,否则你会看到这个问题。

写一个svn更新本地副本然后复制文件的2行批处理文件会更容易吗?

答案 4 :(得分:0)

应用程序池回收不应该是一个大问题。您的问题可能是您的用户在发生这种情况时会丢失会话吗?如果是这样,请切换到StateServer或SQLServer会话,而不是使用InProc。

答案 5 :(得分:0)

Subversion 1.7及以上版本不再在每个子目录中创建.svn文件,这使得在没有.svn文件妨碍的情况下可以做你想做的事。

答案 6 :(得分:0)

我比赛有点晚了,但我会扔2美分:

您可以使用svn export传递-r REV参数。这使您可以将应用程序回滚到指定的版本。

所以你可以使用:

svn export REPOSITORY DESTINATION --force更新为HEAD(应用程序的当前状态)

svn export REPOSITORY -r REV DESTINATION --force更新到其他修订版(也许您应该使用标记)

不要忘记--force param,以便它可以替换DESTINATION中的现有文件。