dotnet restore --getProperty:ProjectAssetsFile returns an empty string for multi targeted projects
- Dominant language
- C#
- Stars
- 3.2k
- Forks
- 1.3k
- PR merge metrics
- PR metrics pending
Description
### 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**
```xml
net8.0;net9.0
```
2. Run the following command
```sh
dotnet restore MyLibrary.csproj --getProperty:ProjectAssetsFile --getProperty:TargetFrameworks
```
This produces the following output. Notice how `ProjectAssetsFile` is an empty string.
```json
{
"Properties": {
"ProjectAssetsFile": "",
"TargetFrameworks": "net8.0;net9.0"
}
}
```
### Workaround
I found a workaround by adding `--getTargetResult:_LoadRestoreGraphEntryPoints` to the restore command.
```sh
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!
```json
{
"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
```
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.