-
Notifications
You must be signed in to change notification settings - Fork 534
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[One .NET] fix 'dotnet publish' with no arguments #8137
Conversation
Fixes: dotnet/maui#15696 Context: dotnet/sdk#30038 In .NET 8 Preview 5, there are various changes to default values: * `dotnet publish` is now `Release` by default * Builds that provide a `$(RuntimeIdentifier)` are no longer "self contained" by default. The result of this change is the problem: dotnet new android dotnet publish Microsoft.NET.RuntimeIdentifierInference.targets(212,5): error NETSDK1191: A runtime identifier for the property 'SelfContained' couldn't be inferred. Specify a rid explicitly. While these commands all work: dotnet build dotnet build -c Release dotnet publish -c Debug dotnet publish -r android-arm64 `Debug` configurations work fine, because trimming is not involved. `dotnet build` works fine, because the offending default appears to be: https://github.com/dotnet/sdk/blob/540b197311bc8d1c2a991fed1b935b094a4d7b2d/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.RuntimeIdentifierInference.targets#L64-L76 `Microsoft.NET.RuntimeIdentifierInference.targets` has a lot of MSBuild validation logic, that its main job is to emit nice error messages for incorrect combinations of MSBuild properties/settings. Android is kind of the odd one out when you compare to .NET console apps, NativeAOT, etc.: * We default to `RuntimeIdentifiers=android-arm;android-arm64;android-x86;android-x64`. * We do our own "inner build" for each `RuntimeIdentifier`. * Inside our build we force `$(SelfContained)` to `true` no matter what. As there is no such thing as a system-wide .NET on Android. The fix appears to be to default `PublishSelfContained=false` and let our existing logic force `SelfContained=true`. I added a new test for this scenario. Our existing test didn't work because it was passing a `RuntimeIdentifier`.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Makes sense to me, cc @rolfbjarne in case something similar should be done on the macios side.
We only set SelfContained=true if we have a RuntimeIdentifier (either by default or set explicitly), so when RuntimeIdentifiers is set, we don't set SelfContained, and we don't seem to run into this problem: |
I think we hit this, because we pass in Debug builds, we detect the attached device and pick the appropriate one. |
* main: [One .NET] fix 'dotnet publish' with no arguments (dotnet#8137) [build] consider `$NUGET_PACKAGES` for `$(XAPackagesDir)` (dotnet#8136) Bump external/xamarin-android-tools from `44885bc` to `3cee10b` (dotnet#8121)
Fixes: dotnet/maui#15696
Context: dotnet/sdk#30038
In .NET 8 Preview 5, there are various changes to default values:
dotnet publish
is nowRelease
by defaultBuilds that provide a
$(RuntimeIdentifier)
are no longer "self contained" by default.The result of this change is the problem:
While these commands all work:
Debug
configurations work fine, because trimming is not involved.dotnet build
works fine, because the offending default appears to be:https://github.com/dotnet/sdk/blob/540b197311bc8d1c2a991fed1b935b094a4d7b2d/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.RuntimeIdentifierInference.targets#L64-L76
Microsoft.NET.RuntimeIdentifierInference.targets
has a lot of MSBuild validation logic, that its main job is to emit nice error messages for incorrect combinations of MSBuild properties/settings.Android is kind of the odd one out when you compare to .NET console apps, NativeAOT, etc.:
We default to
RuntimeIdentifiers=android-arm;android-arm64;android-x86;android-x64
.We do our own "inner build" for each
RuntimeIdentifier
.Inside our build we force
$(SelfContained)
totrue
no matter what. As there is no such thing as a system-wide .NET on Android.The fix appears to be to default
PublishSelfContained=false
and let our existing logic forceSelfContained=true
.I added a new test for this scenario. Our existing test didn't catch this because it was passing a
RuntimeIdentifier
.