2016-12-13 14 views
2

Дать и задачу MSBuild, которая выполняется в AfterTargets="AfterCompile", и создает некоторые файлы, как вы можете получить эти файлы для вывода в текущие проекты, чтобы файлы были скопированы в бен каталог любых проектов, ссылающихся этот проектКак добавить файлы в выходные файлы проектов из задачи MSBuild

+1

Если вы знаете пути к файлам перед компиляцией, вы можете добавить цель с помощью BeforeTargets = «AssignTargetPaths» и заполнить в ней элемент ItemGroup, если метаданные CopyToOutputDirectory установлены в true, они будут скопированы в зависимости от проектов. Я не сразу знаю, как это сделать после компиляции. – stijn

ответ

0

у меня нет никаких гарантий, что это правильное решение, но это похоже на работу:

<Target Name="MyTarget" AfterTargets="AfterCompile"> 
    <PropertyGroup> 
    <MyInput>D:\1.txt</MyInput> 
    <MyOutput>$([System.IO.Path]::GetFullPath('$(MSBuildThisFileDirectory)$(OutDir)\1.txt'))</MyOutput> 
    </PropertyGroup> 
    <Copy SourceFiles="$(MyInput)" DestinationFolder="$(OutDir)" SkipUnchangedFiles="true" /> 
    <ItemGroup> 
    <AllItemsFullPathWithTargetPath Include="$(MyOutput)"> 
     <TargetPath>1.txt</TargetPath> 
     <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> 
    </AllItemsFullPathWithTargetPath> 
    </ItemGroup> 
</Target> 

соответствующая логика здесь: http://source.roslyn.io/#MSBuildTarget=GetCopyToOutputDirectoryItems http://source.roslyn.io/#MSBuildItem=AllItemsFullPathWithTargetPath

В основном мы полагаемся на то, что для определения списка файлов для копирования из зависимых проектов MSBuild вызывает целевой объект GetCopyToOutputDirectoryItems зависимых проектов и использует его вывод (который является AllItemsFullPathWithTargetPath).

Добавляя себя в AllItemsFullPathWithTargetPath, мы получаем в последний момент, когда нас называет зависимый проект.

+0

Обратите внимание, что задача копирования в MyTarget не нужна, она просто притворяется «сгенерированной» 1.txt в выводе первого проекта. –

 Смежные вопросы

  • Нет связанных вопросов^_^