2013-11-12 3 views
4

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

ответ

15

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

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

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

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

Это помогло мне автоматизировать создание сети. config для проекта библиотеки WCF, размещенного в IIS. :) – Achilles

4

Просто поместите имя одного файла в качестве значения для «исходников,». 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> 
+0

Это действительно покрыто второй частью ответа Джеймса выше, спасибо, хотя! – Shaun

0

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