我需要编写我的构建脚本.我正在使用MSBUILD,因为它与VS.net集成.我试图将一些文件从构建环境复制到部署文件夹.我正在使用MSBuild的复制任务.但不是像我期望的那样复制目录树.它将所有内容复制到一个文件夹中.我重复目录树中的所有文件,最终在一个文件夹中.我需要它将文件夹和目录树复制到目标文件夹中.有什么我想念的吗?
这是我的构建脚本的相关部分:
v2.0 x \\networkpath\$(DestEnv)
Jarrod Dixon.. 14
只是我们在调试MSBuild问题时发现的一个宝石:
http://blog.scrappydog.com/2008/06/subtle-msbuild-bug-feature.html
ItemGroups在Targets之前被解析,因此当沿着脚本进一步引用ItemGroup时,将不会拾取任何创建新文件的目标(例如编译!).
Eric Bowen还描述了这个"功能"的解决方法,CreateItem任务:
很多荣誉归功于他!
只是我们在调试MSBuild问题时发现的一个宝石:
http://blog.scrappydog.com/2008/06/subtle-msbuild-bug-feature.html
ItemGroups在Targets之前被解析,因此当沿着脚本进一步引用ItemGroup时,将不会拾取任何创建新文件的目标(例如编译!).
Eric Bowen还描述了这个"功能"的解决方法,CreateItem任务:
很多荣誉归功于他!
为Copy任务指定DestinationFolder时,它会从SourceFiles集合中获取所有项目并将它们复制到DestinationFolder.这是预期的,因为复制任务无法确定每个项目的路径的哪个部分需要用DestinationFolder替换以保持树结构.例如,如果您的SourceDir集合定义如下:
你期望目标文件夹树是什么样的?
要保留树,您需要进行标识转换,并为SourceFiles集合中的每个项生成一个目标项.这是一个例子:
Copy任务将获取SourceFiles集合中的每个项目,并通过使用$(DropPath)替换源项目规范中的**之前的部分来转换其路径.
有人可能会说DestinationFolder属性应该被写为以下转换的快捷方式:
唉,这会阻止你试图避免的深拷贝到平面文件夹场景,但其他人可能会在他们的构建过程中使用.
非常简单的示例,以递归方式复制目录内容和结构:
@(编译)是要复制的所有文件的ItemGroup.可能是这样的:
复制任务将所有文件复制到c:\ foocopy,就像xcopy一样.