Skip to content

Package validation fails if RuntimeIdentifier=any added to .NET tool #50755

@martincostello

Description

@martincostello

Describe the bug

I'm not sure that this is a "real" issue (package validation being enabled on a NuGet tool), but I discovered just now that if NuGet package validation is enabled and RuntimeIdentifiers=any is set in the project file, validation fails with an error like the following:

  DotNetBumper failed with 1 error(s) (2.0s)
    C:\Program Files\dotnet\sdk\10.0.100-rc.1.25451.107\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.ApiCompat.ValidatePackage.targets(39,5): error MSB4018:
      The "Microsoft.DotNet.ApiCompat.Task.ValidatePackageTask" task failed unexpectedly.
      System.IO.FileNotFoundException: Package 'D:\packages\nuget\martincostello.dotnetbumper.any\0.10.1\martincostello.dotnetbumper.any.0.10.1.nupkg' not found. Please provide a valid package path.
         at Microsoft.DotNet.PackageValidation.Package.Create(String packagePath, IReadOnlyDictionary`2 packageAssemblyReferences)
         at Microsoft.DotNet.ApiCompat.ValidatePackage.Run(Func`2 logFactory, Boolean generateSuppressionFile, Boolean preserveUnnecessarySuppressions, Boolean permitUnnecessarySuppressions, String[] suppressionFiles, String suppressionOutputFile, String noWarn, Boolean respectInternals, Boolean enableRuleAttributesMustMatch, String[] excludeAttributesFiles, Boolean enableRuleCannotChangeParameterName, String packagePath, Boolean runApiCompat, Boolean enableStrictModeForCompatibleTfms, Boolean enableStrictModeForCompatibleFrameworksInPackage, Boolean enableStrictModeForBaselineValidation, String baselinePackagePath, String runtimeGraph, IReadOnlyDictionary`2 packageAssemblyReferences, IReadOnlyDictionary`2 baselinePackageAssemblyReferences, String[] baselinePackageFrameworksToIgnore)
         at Microsoft.DotNet.ApiCompat.Task.ValidatePackageTask.ExecuteCore()
         at Microsoft.NET.Build.Tasks.TaskBase.Execute()
         at Microsoft.DotNet.ApiCompat.Task.ValidatePackageTask.Execute()
         at Microsoft.Build.BackEnd.TaskBuilder.ExecuteInstantiatedTask(TaskExecutionHost taskExecutionHost, TaskLoggingContext taskLoggingContext, TaskHost taskHost, ItemBucket bucket, TaskExecutionMode howToExecuteTask)

Feels like if a RID-specific package cannot be found, it should fallback to looking for the "normal" package name, i.e.:

Foo.Bar.any.1.0.0 ➡️ Foo.Bar.1.0.0

To Reproduce

Add the following properties to the project file for an existing .NET tool published to NuGet.org:

<PropertyGroup>
  <EnablePackageValidation>true</EnablePackageValidation>
  <PackageValidationBaselineVersion>YOUR_VERSION_HERE</PackageValidationBaselineVersion>
  <RuntimeIdentifiers>any</RuntimeIdentifiers>
</PropertyGroup>

Exceptions (if any)

See above.

Further technical details

details of dotnet --info

❯ dotnet --info
.NET SDK:
 Version:           10.0.100-rc.1.25451.107
 Commit:            2db1f5ee2b
 Workload version:  10.0.100-rc.1.25458.2
 MSBuild version:   17.15.0-preview-25451-107+2db1f5ee2

Runtime Environment:
 OS Name:     Windows
 OS Version:  10.0.26100
 OS Platform: Windows
 RID:         win-x64
 Base Path:   C:\Program Files\dotnet\sdk\10.0.100-rc.1.25451.107\

.NET workloads installed:
 [wasm-tools]
   Installation Source: SDK 10.0.100-rc.1, VS 17.14.36429.23, VS 18.0.11005.162
   Manifest Version:    10.0.100-rc.1.25451.107/10.0.100-rc.1
   Manifest Path:       C:\Program Files\dotnet\sdk-manifests\10.0.100-rc.1\microsoft.net.workload.mono.toolchain.current\10.0.100-rc.1.25451.107\WorkloadManifest.json
   Install Type:              Msi

Configured to use workload sets when installing new manifests.

Host:
  Version:      10.0.0-rc.1.25451.107
  Architecture: x64
  Commit:       2db1f5ee2b

.NET SDKs installed:
  6.0.428 [C:\Program Files\dotnet\sdk]
  8.0.414 [C:\Program Files\dotnet\sdk]
  9.0.205 [C:\Program Files\dotnet\sdk]
  9.0.305 [C:\Program Files\dotnet\sdk]
  10.0.100-rc.1.25451.107 [C:\Program Files\dotnet\sdk]

.NET runtimes installed:
  Microsoft.AspNetCore.App 6.0.36 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 8.0.20 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 9.0.6 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 9.0.9 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 10.0.0-rc.1.25451.107 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 6.0.36 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 8.0.20 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 9.0.6 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 9.0.9 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 10.0.0-rc.1.25451.107 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.WindowsDesktop.App 6.0.36 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
  Microsoft.WindowsDesktop.App 8.0.20 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
  Microsoft.WindowsDesktop.App 9.0.6 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
  Microsoft.WindowsDesktop.App 9.0.9 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
  Microsoft.WindowsDesktop.App 10.0.0-rc.1.25451.107 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]

Other architectures found:
  x86   [C:\Program Files (x86)\dotnet]
    registered at [HKLM\SOFTWARE\dotnet\Setup\InstalledVersions\x86\InstallLocation]

Environment variables:
  DOTNET_INSTALL_DIR                       [C:\Program Files\dotnet]

global.json file:
  D:\Coding\martincostello\dotnet-bumper\global.json

Learn more:
  https://aka.ms/dotnet/info

Download .NET:
  https://aka.ms/dotnet/download

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions