【问题标题】:xcopy with MsBuildxcopy 与 MsBuild
【发布时间】:2012-05-17 21:29:44
【问题描述】:

我有一个非常简单的构建脚本,如下所示:

<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" />

现在它正在工作:)

【问题讨论】:

标签: msbuild xcopy msbuild-4.0


【解决方案1】:

我设法解决了这个问题。我已经用解决方案更新了问题。

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

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

现在它正在工作:)

【讨论】:

    【解决方案2】:

    您需要执行两次 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 语法
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    • 1970-01-01
    • 2014-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多