我正在尝试使用subversion将更新部署到我的ASP.Net应用程序,我面临的一个问题是每当更新工作副本(包含构建版本)时,bin中的“.svn”文件夹都会更新并且这会导致ASP.Net appdomain回收。我不希望这种情况发生,除非bin中的某些内容实际发生了变化。
有没有办法告诉ASP.Net忽略bin中的“.svn”文件夹?基本上不是在观察该文件夹进行更改吗?
如果这不起作用,我将使用web文件夹之外的暂存文件夹将构建下载到服务器上,然后使用脚本来修补/更新实际的Web文件夹。
[编辑:] svn导出选项不会将我的部署保留在版本控制之下,我希望能够在Web文件夹上执行“svn update”以部署和回滚版本。
答案 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中的现有文件。