2012-02-13 2 views
0

Я создаю buildscript, где я выводя TargetOutputs из MSBuild, а затем хочу вызвать FXCop в отдельной цели и использовать эти выходы в TargetAssemblies.Пропустить Элементы вывода для отдельной цели с помощью MSBuild

<Target Name="Build"> 
    <MSBuild Projects="@(Projects)" 
      Properties="Platform=$(Platform);Configuration=$(Configuration);" 
      Targets="Build" 
      ContinueOnError="false"> 
     <Output TaskParameter="TargetOutputs" ItemName="TargetDLLs"/> 
    </MSBuild> 
    <CallTarget Targets="FxCopReport" /> 
</Target> 

<Target Name="FxCopyReport"> 
    <Message Text="FXCop assemblies to test: @(TargetDLLs)" /> 
    <FxCop 
     ToolPath="$(FXCopToolPath)" 
     RuleLibraries="@(FxCopRuleAssemblies)" 
     AnalysisReportFileName="FXCopReport.html" 
     TargetAssemblies="@(TargetDLLs)" 
     OutputXslFileName="$(FXCopToolPath)\Xml\FxCopReport.xsl" 
     ApplyOutXsl="True" 
     FailOnError="False" /> 
</Target> 

Когда я запускаю это, в мишени FxCopyReport, Послание TargetDLLs в пустой, в то время как если бы это в цель сборки, он населяет.

Как передать/исправить это значение?

ответ

0

Существует blog post Sayed Ibrahim Hashimi (соавтор книги Inside MSBuild), в котором описывается проблема, с которой вы столкнулись, начиная с 2005 года. По существу задача CallTarget ведет себя странно. Я не уверен, что это ошибка или спроектированное поведение, но в MSBuild 4.0 поведение по-прежнему остается неизменным.

В качестве обходного пути используйте обычный механизм MSBuild для задания порядка выполнения целей в MSBuild с использованием атрибутов DependsOnTargets, BeforeTargets или AfterTargets.

0

Я смог понять это.

По существу, после этапа MSBuild я создал элементную группу, которую я тогда ссылал на вызывающий Target.

<Target Name="Build"> 
    <Message Text="Building Solution Projects: %(Projects.FullPath)" /> 
    <MSBuild Projects="@(Projects)" 
      Properties="Platform=$(Platform);Configuration=$(Configuration);" 
      Targets="Build" 
      ContinueOnError="false"> 
     <Output TaskParameter="TargetOutputs" ItemName="TargetDllOutputs"/> 
    </MSBuild> 
    <ItemGroup> 
     <TestAssemblies Include="@(TargetDllOutputs)" /> 
    </ItemGroup> 
    </Target> 

    <Target Name="FXCopReport"> 
    <Message Text="FXCop assemblies to test: @(TestAssemblies)" /> 
    <FxCop 
     ToolPath="$(FXCopToolPath)" 
     RuleLibraries="@(FxCopRuleAssemblies)" 
     AnalysisReportFileName="$(BuildPath)\$(FxCopReportFile)" 
     TargetAssemblies="@(TestAssemblies)" 
     OutputXslFileName="$(FXCopToolPath)\Xml\FxCopReport.xsl" 
     Rules="$(FxCopExcludeRules)" 
     ApplyOutXsl="True" 
     FailOnError="True" /> 
    <Message Text="##teamcity[importData id='FxCop' file='$(BuildPath)\$(FxCopReportFile)']" Condition="'$(TEAMCITY_BUILD_PROPERTIES_FILE)' != ''" /> 
    </Target> 
Смежные вопросы