2012-01-24 3 views
1

У меня работает следующая задача MSBuild.MSBuild - сохранить ItemGroup в отдельном файле

<Target Name="MyTarget"> 
    <ItemGroup> 
     <ExcludeList Include="$(ProjectPath)\**\.svn\**"/> 
     <ExcludeList Include="$(ProjectPath)\**\obj\**"/> 
     <ExcludeList Include="$(ProjectPath)\**\*.config"/> 
     <ExcludeList Include="$(ProjectPath)\**\*.cs"/> 
     <ExcludeList Include="$(ProjectPath)\**\*.csproj"/> 
     <ExcludeList Include="$(ProjectPath)\**\*.user"/> 
    </ItemGroup> 

    <ItemGroup> 
     <ZipFiles Include="$(ProjectPath)\**\*.*" Exclude="@(ExcludeList)" /> 
    </ItemGroup> 

    <Zip Files="@(ZipFiles)" 
     WorkingDirectory="$(ProjectPath)" 
     ZipFileName="$(PackageDirectory)\$(ProjectName).package.zip" 
     ZipLevel="9" /> 
</Target> 

Я хотел бы хранить ExcludeList ItemGroup в отдельном файле, потому что я буду иметь несколько целей MSBuild в отдельных файлах, которые все должны использовать этот список, и я не хочу, чтобы воссоздать и сохранить несколько копий.

Каков наилучший способ экстернализации ItemGroup и загрузка его в несколько скриптов msbuild?

ответ

2

Создайте свой ItemGroup в отдельном файле msbuild, затем вы можете включить его в оператор Import Element.

Make.targets

<Project DefaultTargets = "Build" 
    xmlns="http://schemas.microsoft.com/developer/msbuild/2003" > 
    <ItemGroup Condition="'$(ProjectPath)' != ''"> 
     <ExcludeList Include="$(ProjectPath)\**\.svn\**"/> 
     <ExcludeList Include="$(ProjectPath)\**\obj\**"/> 
     <ExcludeList Include="$(ProjectPath)\**\*.config"/> 
     <ExcludeList Include="$(ProjectPath)\**\*.cs"/> 
     <ExcludeList Include="$(ProjectPath)\**\*.csproj"/> 
     <ExcludeList Include="$(ProjectPath)\**\*.user"/> 
     <ExcludeList Include="$(ProjectPath)\**\*.proj"/> 
    </ItemGroup> 
</Project> 

Make.proj

<Project DefaultTargets = "Build" 
    xmlns="http://schemas.microsoft.com/developer/msbuild/2003" > 

    <PropertyGroup> 
     <ProjectPath>D:\Temp</ProjectPath> 
    </PropertyGroup> 

    <Import Project=".\Make.targets" Condition="'$(ProjectPath)' != ''" /> 

    <Target Name = "Build"> 
     <Message Text="Exclude = @(ExcludeList)" /> 
    </Target> 
</Project> 

При запуске MSBuild из D: \ Temp (с двумя файлами, в противном случае пусто) я получаю:

Build started 24-01-2012 16:50:33. 
Project "D:\Temp\Make.proj" on node 1 (default targets). 
Build: 
    Exclude = D:\Temp\Make.proj 
Done Building Project "D:\Temp\Make.proj" (default targets). 


Build succeeded. 
    0 Warning(s) 
    0 Error(s) 
+0

@ Hussom Я пробовал это. Когда я перемещал элемент ItemGroup в отдельный файл, а затем использовал Import, свойство ExcludeList было пустым от исходной цели. Можете ли вы включить рабочий образец в свой ответ? – RationalGeek

+0

@ Hussom Спасибо. Этот образец работает для меня. Теперь, чтобы понять, почему он не работает в моем фактическом скрипте ... – RationalGeek

+0

Правильно ли указан путь в атрибуте Project? – Huusom

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