Skip to content

dotnet restore --getProperty:ProjectAssetsFile returns an empty string for multi targeted projects #49426

Open
@0xced

Description

@0xced

Describe the bug

The --getProperty option of dotnet commands is supposed to return the specified property as JSON. But performing dotnet restore --getProperty:ProjectAssetsFile on a multi targeted project returns an empty string.

I wonder if it's related to #38956.

To Reproduce

  1. Create a project file with multiple target frameworks

MyLibrary.csproj

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFrameworks>net8.0;net9.0</TargetFrameworks>
  </PropertyGroup>

</Project>
  1. Run the following command
dotnet restore MyLibrary.csproj --getProperty:ProjectAssetsFile --getProperty:TargetFrameworks

This produces the following output. Notice how ProjectAssetsFile is an empty string.

{
  "Properties": {
    "ProjectAssetsFile": "",
    "TargetFrameworks": "net8.0;net9.0"
  }
}

Workaround

I found a workaround by adding --getTargetResult:_LoadRestoreGraphEntryPoints to the restore command.

dotnet restore MyLibrary.csproj --getProperty:ProjectAssetsFile --getProperty:TargetFrameworks -getTargetResult:_LoadRestoreGraphEntryPoints

Now the ProjectAssetsFile has a valid value!

But I don't really like depending on the undocumented _LoadRestoreGraphEntryPoints target and on what seems to be a side effect!

{
  "Properties": {
    "ProjectAssetsFile": "/private/tmp/MyLibrary/obj/project.assets.json",
    "TargetFrameworks": "net8.0;net9.0"
  },
  "TargetResults": {
    "_LoadRestoreGraphEntryPoints": {
      "Result": "Success",
      "Items": [
        {
          "Identity": "/private/tmp/MyLibrary/MyLibrary.csproj",
          "FullPath": "/private/tmp/MyLibrary/MyLibrary.csproj",
          "RootDir": "/",
          "Filename": "MyLibrary",
          "Extension": ".csproj",
          "RelativeDir": "/private/tmp/MyLibrary/",
          "Directory": "private/tmp/MyLibrary/",
          "RecursiveDir": "",
          "ModifiedTime": "2025-06-16 22:48:27.8055988",
          "CreatedTime": "2025-06-16 22:47:50.9395942",
          "AccessedTime": "2025-06-16 22:48:27.8879172",
          "DefiningProjectFullPath": "/usr/local/share/dotnet/sdk/9.0.301/NuGet.targets",
          "DefiningProjectDirectory": "/usr/local/share/dotnet/sdk/9.0.301/",
          "DefiningProjectName": "NuGet",
          "DefiningProjectExtension": ".targets"
        }
      ]
    }
  }
}

Further technical details

dotnet --info
.NET SDK:
 Version:           9.0.301
 Commit:            a596cd22e2
 Workload version:  9.0.300-manifests.b2ed98c7
 MSBuild version:   17.14.5+edd3bbf37

Runtime Environment:
 OS Name:     Mac OS X
 OS Version:  14.7
 OS Platform: Darwin
 RID:         osx-arm64
 Base Path:   /usr/local/share/dotnet/sdk/9.0.301/

.NET workloads installed:
There are no installed workloads to display.
Configured to use loose manifests when installing new manifests.

Host:
  Version:      9.0.6
  Architecture: arm64
  Commit:       3875b54e7b

.NET SDKs installed:
  6.0.428 [/usr/local/share/dotnet/sdk]
  8.0.411 [/usr/local/share/dotnet/sdk]
  9.0.301 [/usr/local/share/dotnet/sdk]

.NET runtimes installed:
  Microsoft.AspNetCore.App 6.0.36 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 8.0.17 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 9.0.6 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 6.0.36 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
  Microsoft.NETCore.App 8.0.17 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
  Microsoft.NETCore.App 9.0.6 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]

Other architectures found:
  x64   [/usr/local/share/dotnet/x64]
    registered at [/etc/dotnet/install_location_x64]

Environment variables:
  Not set

global.json file:
  Not found

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

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

Metadata

Metadata

Assignees

Labels

Area-CLIcli-uxIssues and PRs that deal with the UX of the CLI (exit codes, log output, verbs/options, and so on)untriagedRequest triage from a team member

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions