Skip to content

Fix msbuild loop in VS solutions that reference the OpenTAP nuget package.

Asger Iversen requested to merge buildLoopFix into master

AddAssemblyReferencesFromPackage should always write project.opentap.g.props file even if empty, to avoid that msbuild runs the target over and over.

The issue was caused by this target running endlessly:

  <Target Name="GenerateOpenTapReferenceProps"
          Inputs="$(MSBuildProjectFullPath)"
          Outputs="$(OpenTapAutogeneratedMsBuildReferenceFile)"
          DependsOnTargets="InstallOpenTapPackages" BeforeTargets="ResolveReferences;CoreCompile">
    <ItemGroup>
      <OpenTapPackagesToReference Include="@(AdditionalOpenTapPackage->WithMetadataValue('Reference', 'true'))"/>
      <OpenTapPackagesToReference Include="@(OpenTapPackageReference)" Exclude="@(OpenTapPackageReference->WithMetadataValue('Reference', 'false'))"/>
    </ItemGroup>
    <AddAssemblyReferencesFromPackage PackageInstallDir="$(OutDir)"
                                      OpenTapPackagesToReference="@(OpenTapPackagesToReference)"
                                      TargetMsBuildFile="$(OpenTapAutogeneratedMsBuildReferenceFile)">
      <Output TaskParameter="Assemblies" ItemName="_OpenTapPackagesReferences"/>
    </AddAssemblyReferencesFromPackage>
    <Touch Files="$(MSBuildThisFileFullPath)"/>
    <ItemGroup>
      <ReferencePathWithRefAssemblies Include="@(_OpenTapPackagesReferences-> '$(OutDir)%(Identity)')"/>
    </ItemGroup>
  </Target>

This only happens in projects that reference the OpenTAP nuget (so they get that target), and then do not use any <OpenTapPackageReference>. In that case we need to make sure the $(OpenTapAutogeneratedMsBuildReferenceFile) is still created, so MSBuild's logic for determining if the target is up to date can work.

Closes #460 (closed)

Edited by Asger Iversen

Merge request reports