简体   繁体   中英

MSBuild ItemGroup Condition Project Reference

I'm trying to include a Project Reference based on a value in the ItemGroup Condition

This is what I have tried. With BeforeTargets Compile it does recognize the project but it won't let me build the project.

<Target Name="ErpSystemToUse" BeforeTargets="Compile">
    <ReadLinesFromFile File="$(MSBuildProjectDirectory)\..\..\Presentation\Nop.Web\App_Data\erpSystemToUse.txt">
        <Output TaskParameter="Lines" ItemName="ValueTextFile" />
    </ReadLinesFromFile>
    <Message Text="@(ValueTextFile)" Importance="high" />

    <ItemGroup Condition="'@(ValueTextFile)' == 'Twinfield'">
        <ProjectReference Include="..\..\Dimerce.Twinfield\Dimerce.Plugin.Misc.Twinfield\Dimerce.Plugin.Misc.Twinfield.csproj" />
    </ItemGroup>
</Target>

Is what I am trying to achieve possible?

I have a project where I had to inspect output of System.Reflection.Emit . Decided to include package reference only when appropriate constant is defined

Main difference is that target executes before CollectPackageReferences . Try to change BeforeTargets .

Also use Inputs and Outputs to reduce build time

  <Target Name="IncludeIlPackReference"
          Inputs="$(DefineConstants)" Outputs="@(PackageReference)"
          BeforeTargets="CollectPackageReferences"
          Condition="$(DefineConstants.Contains('TRACE_GENERATED_IL'))">
    <ItemGroup>
      <PackageReference Include="Lokad.ILPack" Version="0.1.6" />
    </ItemGroup>
  </Target>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM