ASP.Net编译器如何排除部署中的.svn目录

时间:2011-07-31 20:33:32

标签: svn msbuild cruisecontrol.net aspnet-compiler

在我的本地计算机上,我检查了一个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工具提示符运行的。知道为什么会有不同的行为吗?

3 个答案:

答案 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。