在我的本地计算机上,我检查了一个Web应用程序,然后使用MSBuild编译它,然后使用aspnet_compiler进行预编译和部署。命令行如下所示:
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC>aspnet_compiler.exe -v / -p C:\<Some Dir> -u C:\<Some Target Dir> -f
这在测试中本地工作正常,这意味着预编译的网站会被复制到目标目录,而不会复制任何.svn目录。但是,在我为CC.Net编写脚本的远程计算机上,.svn目录确实被复制了。手动为aspnet_compiler运行命令行会得到相同的结果(通过.svn文件夹复制):
D:\Program Files\Microsoft Visual Studio 10.0\VC>aspnet_compiler.exe -v / -p D:\<Some Dir> -u D:\<Some Target Dir> -f
在这两个实例中,我都是从x86 VS工具提示符运行的。知道为什么会有不同的行为吗?
答案 0 :(得分:1)
如果你正在使用CCNet,我建议告诉SVN导出而不是检查。这将解决这个问题。在进行集成构建时,您的构建源中不应该有任何VCS crud。
您必须直接在CCNet中调用svn命令行客户端,而不是执行svn scm块。
这总是让我感到很生气,这就是我现在使用TeamCity的原因(这很好)。
一个小小的预感是,当使用TortoiseSVN时,它会将.svn文件夹创建为隐藏,但是当CCNet调用svn.exe时,它不会隐藏文件夹。我认为aspnet_compiler对此很敏感。
答案 1 :(得分:0)
你可以发布这样的代码,它将删除所有的svn文件
<Project
xmlns = "http://schemas.microsoft.com/developer/msbuild/2003"
name = "AspNetPreCompile"
DefaultTargets = "PrecompileWeb">
<Target Name = "PrecompileWeb">
<AspNetCompiler
VirtualPath = "DeployTemp"
PhysicalPath = "Physical source path"
TargetPath = "Physical target path"
Force = "true"
Debug = "false"
Updateable = "true"/>
</Target>
</Project>
或者您可以使用这样以递归方式删除所有svn文件
<Project
xmlns = "http://schemas.microsoft.com/developer/msbuild/2003"
name = "AspNetPreCompile"
DefaultTargets = "build">
<ItemGroup>
<FilesToCopy Include="C:\ProjectWorkingDirectories\YourWebsite\Source\**\*.*" Exclude="C:\ProjectWorkingDirectories\YourWebsite\Source\**\.svn\**"/>
</ItemGroup>
<Target Name = "build">
<CallTarget Targets="PrecompileWeb"/>
<CallTarget Targets="CopyFiles"/>
</Target>
<Target Name = "PrecompileWeb">
<AspNetCompiler
VirtualPath = "/Source"
PhysicalPath ="C:\ProjectWorkingDirectories\YourWebsite\Source"/>
</Target>
<Target Name = "CopyFiles">
<Copy SourceFiles="@(FilesToCopy)" DestinationFiles="@(FilesToCopy->'C:\TempProjectPublish\YourWebsite\YourWebsite\%(RecursiveDir)\%(Filename)%(Extension)')" ContinueOnError="true"/>
</Target>
</Project>
答案 2 :(得分:0)
感谢您的回复。事实证明,我能够直接核对svn存储库并重新检查它并运行解决问题的aspnet_compiler。