Скопируйте один файл в MSBuild без использования Exec или ItemGroup.

Есть какой-либо способ сделать это? Мне просто нужно скопировать один файл и подумать, что может быть некоторый синтаксис для параметра SourceFiles задачи "Копировать", что означает, что вам не нужно предварительно определять ItemGroup, я бы предпочел придерживаться ItemGroup, а не использовать Exec.

3 ответа

Решение

Копирование файлов также принимает в качестве входных данных прямую группу свойств:

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

Или даже просто строка

<Copy SourceFiles="Pathtofile" DestinationFolder="c:\"/> 

Просто поместите одно имя файла в качестве значения для "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>

Для чего бы это ни стоило, мне нужно было сделать то же самое, и я хотел добавить информацию о версии в имя файла. Вот как я это сделал для проекта в $(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>
Другие вопросы по тегам