使用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/