使用MsBuild的xcopy

5

我有一个非常简单的构建脚本,看起来像这样:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0" DefaultTargets="Bundle">

<ItemGroup>
    <BuildArtifacts Include="..\_buildartifacts" />
    <Application    Include="..\_application" />
</ItemGroup>

<Target Name="Clean">
    <RemoveDir Directories="@(BuildArtifacts)" />
    <RemoveDir Directories="@(Application)" />
</Target>

<Target Name="Init" DependsOnTargets="Clean">
    <MakeDir Directories="@(BuildArtifacts)" />
    <MakeDir Directories="@(Application)" />
</Target>

<Target Name="Bundle" DependsOnTargets="Compile">
    <Exec Command="xcopy.exe %(BuildArtifacts.FullPath) %(Application.FullPath) /e /EXCLUDE:$(MSBuildProjectDirectory)\files_to_ignore_when_bundling.txt" WorkingDirectory="C:\Windows\" />
</Target>

问题在于Bundle目标,只有%(BuildArtifacts.FullPath)被提取了,当脚本执行时忽略了%(BuildArtifacts.FullPath)
执行命令如下: xcopy.exe C:\@Code\blaj_buildartifacts /e /EXCLUDE:C:\@Code\blaj\files_to_ignore_when_bundling.txt" exited with code 4 可以看到,目的地路径并没有出现,如果我硬编码路径或只是目的路径,它就可以工作。你有什么建议吗?
更新: 我成功解决了这个问题,我删除了最后一个部分WorkingDirectory="C:\Windows\" 并将脚本更改为以下内容:
<Exec Command="xcopy.exe @(BuildArtifacts) @(Application) /e /EXCLUDE:$(MSBuildProjectDirectory)\files_to_ignore_when_bundling.txt" />

现在它正在工作 :)


1
使用内置的<Copy>任务而不是调用xcopy:http://msdn.microsoft.com/en-us/library/3e54c37h.aspx - skolima
2个回答

3

我成功解决了这个问题。我已经更新了问题并提供了解决方案。

我删除了最后一部分 WorkingDirectory="C:\Windows\",并将脚本更改为如下:

 <Exec Command="xcopy.exe @(BuildArtifacts) @(Application) /e /EXCLUDE:$(MSBuildProjectDirectory)\files_to_ignore_when_bundling.txt" />

现在它正在运行 :)


0

你需要执行两次xcopy。你试图在同一调用中为两个不同的项目数组使用任务批处理,这样是行不通的。尝试这样做:

<Target Name="Bundle" DependsOnTargets="Compile">
  <Exec Command="xcopy.exe %(BuildArtifacts.FullPath) /e /EXCLUDE:$(MSBuildProjectDirectory)\files_to_ignore_when_bundling.txt" WorkingDirectory="C:\Windows\" />
  <Exec Command="xcopy.exe %(Application.FullPath) /e /EXCLUDE:$(MSBuildProjectDirectory)\files_to_ignore_when_bundling.txt" WorkingDirectory="C:\Windows\" />
</Target>

哎呀,我无法让它工作,xcopy 需要一个目标路径,而这就是 %(Application.FullPath) 应该是的。我不确定我完全理解 MSBuild 语法。 - Pelle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接