9

有没有办法做到这一点?我只需要复制一个文件,并认为 Copy 任务的 SourceFiles 参数可能有一些语法,这意味着您不需要事先定义 ItemGroup,我宁愿坚持使用 ItemGroup 而不是使用 Exec。

4

3 回答 3

21

复制文件也将直接属性组作为输入:

<PropertyGroup>
  <SourceFile>Some file</SourceFile>
</PropertyGroup>
<Copy SourceFiles="$(SourceFile)" DestinationFolder="c:\"/> 

甚至只是一个字符串

<Copy SourceFiles="Pathtofile" DestinationFolder="c:\"/> 
于 2013-11-14T10:05:35.443 回答
4

只需将单个文件名作为“SourceFiles”的值。Easy-Peezey。

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="AllTargetsWrapper" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

    <PropertyGroup>
        <WorkingCheckout>.</WorkingCheckout>
    </PropertyGroup>

    <Target Name="AllTargetsWrapper">
        <CallTarget Targets="CopyItTarget" />
    </Target>

    <Target Name="CopyItTarget">
        <Copy SourceFiles="c:\windows\system.ini" DestinationFolder="$(WorkingCheckout)\"/>     
        <Error Condition="!Exists('$(WorkingCheckout)\system.ini')" Text="No Copy Is Bad And Sad" />
    </Target>

</Project>
于 2013-11-14T14:21:52.650 回答
2

对于它的价值,我需要做同样的事情,并想在文件名中放入一些版本信息。这是我为 $(SolutionDir) 中的一个项目执行此操作的方法,该项目引用了另一个解决方案中另一个项目创建的可执行文件,我可以轻松地表达路径:

  <Target Name="AfterBuild">
    <GetAssemblyIdentity AssemblyFiles="$(SolutionDir)..\bin\$(Configuration)\SomeExectuable.exe">
      <Output TaskParameter="Assemblies" ItemName="AssemblyVersions" />
    </GetAssemblyIdentity>
    <CreateProperty Value="$(TargetDir)$(TargetName)-%(AssemblyVersions.Version)$(TargetExt)">
      <Output TaskParameter="Value" PropertyName="NewTargetPath" />
    </CreateProperty>
    <Copy SourceFiles="$(TargetPath)" DestinationFiles="$(NewTargetPath)" />
  </Target>
于 2017-02-06T21:05:45.623 回答