当前位置:  开发笔记 > 前端 > 正文

为什么MSBuild不像我期望的那样复制

如何解决《为什么MSBuild不像我期望的那样复制》经验,为你挑选了3个好方法。

我需要编写我的构建脚本.我正在使用MSBUILD,因为它与VS.net集成.我试图将一些文件从构建环境复制到部署文件夹.我正在使用MSBuild的复制任务.但不是像我期望的那样复制目录树.它将所有内容复制到一个文件夹中.我重复目录树中的所有文件,最终在一个文件夹中.我需要它将文件夹和目录树复制到目标文件夹中.有什么我想念的吗?

这是我的构建脚本的相关部分:


    v2.0
    outputfolder
    x
    \\networkpath\$(DestEnv)


    
    
    

    


    

Jarrod Dixon.. 14

只是我们在调试MSBuild问题时发现的一个宝石:

http://blog.scrappydog.com/2008/06/subtle-msbuild-bug-feature.html

ItemGroups在Targets之前被解析,因此当沿着脚本进一步引用ItemGroup时,将不会拾取任何创建新文件的目标(例如编译!).

Eric Bowen还描述了这个"功能"的解决方法,CreateItem任务:


    
        
    
    

很多荣誉归功于他!



1> Jarrod Dixon..:

只是我们在调试MSBuild问题时发现的一个宝石:

http://blog.scrappydog.com/2008/06/subtle-msbuild-bug-feature.html

ItemGroups在Targets之前被解析,因此当沿着脚本进一步引用ItemGroup时,将不会拾取任何创建新文件的目标(例如编译!).

Eric Bowen还描述了这个"功能"的解决方法,CreateItem任务:


    
        
    
    

很多荣誉归功于他!



2> Franci Penov..:

为Copy任务指定DestinationFolder时,它会从SourceFiles集合中获取所有项目并将它们复制到DestinationFolder.这是预期的,因为复制任务无法确定每个项目的路径的哪个部分需要用DestinationFolder替换以保持树结构.例如,如果您的SourceDir集合定义如下:


    
    
    

你期望目标文件夹树是什么样的?

要保留树,您需要进行标识转换,并为SourceFiles集合中的每个项生成一个目标项.这是一个例子:


Copy任务将获取SourceFiles集合中的每个项目,并通过使用$(DropPath)替换源项目规范中的**之前的部分来转换其路径.

有人可能会说DestinationFolder属性应该被写为以下转换的快捷方式:


唉,这会阻止你试图避免的深拷贝到平面文件夹场景,但其他人可能会在他们的构建过程中使用.



3> Adam..:

非常简单的示例,以递归方式复制目录内容和结构:


@(编译)是要复制的所有文件的ItemGroup.可能是这样的:

   
       
   

复制任务将所有文件复制到c:\ foocopy,就像xcopy一样.

推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有