msbuild icon indicating copy to clipboard operation
msbuild copied to clipboard

Under SDK version >= 8.0.300 many NuGet-related properties are no longer set during evaluation

Open EduardSergeev opened this issue 1 year ago • 2 comments

Issue Description

There seems to be a breaking change introduced in .NET SDK starting from version 8.0.300: During the evaluation stage of the build many NuGet-related properties are no longer populated, for example $(NugetPackageRoot) or $(NuGetPackageFolder) are missing.

For example when the same project is build using dotnet build -bl the following NuGet* properties are present in Evaluation stage:
With SDK 8.0.206: image

While with SDK 8.0.303 only: image (note missing $(NugetPackageRoot))

I could not find any relevant information regarding this breaking change (our build is broken since we were relying on $(NugetPackageRoot) being set) in release notes so I was wondering if it is undocumented change or a bug? And if there is a way to restore a previous behavior with SDK 8.0.303?

Steps to Reproduce

The following minimal project demonstrates the change in behavior:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
  </PropertyGroup>
  <Target Name="CheckProperty" BeforeTargets="Restore">
    <Message Text="NugetPackageRoot: $(NugetPackageRoot)" Importance="high" />
  </Target>
</Project>

Expected Behavior

When built using dotnet build command from SDK 8.0.206 the following output is produced:

$ dotnet build
MSBuild version 17.9.8+610b4d3b5 for .NET
  Determining projects to restore...
  NugetPackageRoot: /home/eduard/.nuget/packages/
  Restored /home/eduard/codeir/ir-grpc/src/Test/Test.csproj (in 78 ms).
  Test -> /home/eduard/codeir/ir-grpc/src/Test/bin/Debug/net8.0/Test.dll

The same output is expected under SDK 8.0.300.

Actual Behavior

When built using dotnet build command from SDK 8.0.300:

$ dotnet build
  Determining projects to restore...
  NugetPackageRoot:
  All projects are up-to-date for restore.
  Test -> /home/eduard/codeir/ir-grpc/src/Test/bin/Debug/net8.0/Test.dll

Ask us questions

Is it undocumented change or a bug? And if there is a way to restore a previous behavior with SDK 8.0.303?

EduardSergeev avatar Aug 09 '24 12:08 EduardSergeev

It is probably not a bug and I now suspect that $(NugetPackageRoot) is not supposed to be available before Restore target is executed. Might have been working in previous SDK versions purely by chance. I'll leave my issue as is to confirm.

EduardSergeev avatar Aug 09 '24 20:08 EduardSergeev

@EduardSergeev Yes, I believe you're seeing results of https://github.com/dotnet/msbuild/pull/9748.

rainersigwald avatar Aug 13 '24 13:08 rainersigwald