使用msbuild复制所有文件和文件夹
时间:2020-03-06 14:34:53 来源:igfitidea点击:
只是想知道是否有人可以通过我尝试编写的某些msbuild脚本来帮助我。我想做的是使用msbuild将所有文件和子文件夹从一个文件夹复制到另一个文件夹。
{ProjectName} |----->Source |----->Tools |----->Viewer |-----{about 5 sub dirs}
我需要做的是将所有文件和子文件夹从tools文件夹复制到应用程序的debug文件夹中。这是我到目前为止的代码。
<ItemGroup> <Viewer Include="..$(ApplicationDirectory)\Tools\viewer\**\*.*" /> </ItemGroup> <Target Name="BeforeBuild"> <Copy SourceFiles="@(Viewer)" DestinationFolder="@(Viewer->'$(OutputPath)\Tools')" /> </Target>
生成脚本会运行,但不会复制任何文件或者文件夹。
谢谢
解决方案
我们是否尝试指定具体的目标目录而不是
DestinationFolder="@(Viewer->'$(OutputPath)\Tools')" ?
我对高级MSBuild语法不是很熟练,但是
@(Viewer->'$(OutputPath)\Tools')
对我来说看起来很奇怪。脚本看起来不错,所以问题可能出在$(ApplicationDirectory)和$(OutputPath)的值中
编辑:
这是一篇可能有用的博客文章:
如何:使用任务递归复制文件
我认为问题可能出在我们如何创建ItemGroup和调用Copy任务上。看看这是否有意义:
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5"> <PropertyGroup> <YourDestinationDirectory>..\SomeDestinationDirectory</YourDestinationDirectory> <YourSourceDirectory>..\SomeSourceDirectory</YourSourceDirectory> </PropertyGroup> <Target Name="BeforeBuild"> <CreateItem Include="$(YourSourceDirectory)\**\*.*"> <Output TaskParameter="Include" ItemName="YourFilesToCopy" /> </CreateItem> <Copy SourceFiles="@(YourFilesToCopy)" DestinationFiles="@(YourFilesToCopy->'$(YourDestinationDirectory)\%(RecursiveDir)%(Filename)%(Extension)')" /> </Target> </Project>
我是MSBuild的新手,但是我发现EXEC Task非常适合此类情况。我在项目中遇到了同样的挑战,这对我有用,而且简单得多。有人请告诉我这是否不是一个好习惯。
<Target Name="CopyToDeployFolder" DependsOnTargets="CompileWebSite"> <Exec Command="xcopy.exe $(OutputDirectory) $(DeploymentDirectory) /e" WorkingDirectory="C:\Windows\" /> </Target>
我个人使用了CopyFolder,它是SDC任务库的一部分。
http://sdctasks.codeplex.com/