Skip to content
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

Add escape hatch for publishing with SelfContained=true, but no RuntimeIdentifier. #36047

Conversation

rolfbjarne
Copy link
Member

This is identical to issue #33414 (allow PublishAot=true without RuntimeIdentifier), except for the SelfContained property instead of the PublishAot property.

This adds an escape hatch for a sanity check when trying to publish with SelfContained=true, but without a RuntimeIdentifier, because the check is not valid when building universal apps for macOS and Mac Catalyst (the netX-macos and netX-maccatalyst target frameworks).

When building such an app, the project file will set RuntimeIdentifiers (plural):

<TargetFramework>net8.0-macos</TargetFramework>
<RuntimeIdentifiers>osx-x64;osx-arm</RuntimeIdentifiers>

and then during the build, the macOS SDK will run two inner builds, with RuntimeIdentifiers unset, and RuntimeIdentifier set to each of the rids (and at the end merge the result into a single app).

The problem is that the outer build, where RuntimeIdentifiers is set, but RuntimeIdentifier isn't, triggers the sanity check if the developer sets SelfContained=true, and that fails the build.

Note that SelfContained defaults to true if PublishTrimmed=true, which means that just setting PublishTrimmed=true also triggers the sanity check.

Ref: xamarin/xamarin-macios#19142

…meIdentifier.

This is identical to issue dotnet#33414 (allow PublishAot=true without RuntimeIdentifier), except for the SelfContained property instead of the PublishAot property.

This adds an escape hatch for a sanity check when trying to publish with SelfContained=true, but without a RuntimeIdentifier, because the check is not valid when building universal apps for macOS and Mac Catalyst (the netX-macos and netX-maccatalyst target frameworks).

When building such an app, the project file will set RuntimeIdentifiers (plural):

    <TargetFramework>net8.0-macos</TargetFramework>
    <RuntimeIdentifiers>osx-x64;osx-arm</RuntimeIdentifiers>

and then during the build, the macOS SDK will run two inner builds, with RuntimeIdentifiers unset, and RuntimeIdentifier set to each of the rids (and at the end merge the result into a single app).

The problem is that the outer build, where RuntimeIdentifiers is set, but RuntimeIdentifier isn't, triggers the sanity check if the developer sets SelfContained=true, and that fails the build.

Note that SelfContained defaults to true if PublishTrimmed=true, which means that just setting PublishTrimmed=true also triggers the sanity check.

Ref: xamarin/xamarin-macios#19142
@dotnet-issue-labeler dotnet-issue-labeler bot added Area-External untriaged Request triage from a team member labels Oct 12, 2023
@rolfbjarne
Copy link
Member Author

CC @nagilson @dsplaisted

@rolfbjarne
Copy link
Member Author

This is a breaking change in .NET 8 for us, so it would be nice to get it backported as well, if possible.

@dsplaisted
Copy link
Member

Eventually, once we have better support for TargetFramework aliasing (NuGet/Home#12124), I'd like to see if we can change the pattern from this:

<TargetFramework>net8.0-macos</TargetFramework>
<RuntimeIdentifiers>osx-x64;osx-arm</RuntimeIdentifiers>

To something like this, which would use more of the built-in multi-targeting support:

<TargetFrameworks>net8.0-macos/osx-x64;net8.0-macos/osx-arm</TargetFrameworks>

@ViktorHofer
Copy link
Member

/azp run

@azure-pipelines
Copy link

Azure Pipelines successfully started running 1 pipeline(s).

Copy link
Member

@nagilson nagilson left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, thank you and sorry you're hitting this error. I should've provided an escape hatch from the beginning!

@nagilson
Copy link
Member

/backport to release/8.0.2xx

@github-actions
Copy link
Contributor

Started backporting to release/8.0.2xx: https://github.com/dotnet/sdk/actions/runs/6498791126

@nagilson nagilson merged commit 598f1e7 into dotnet:main Oct 13, 2023
16 checks passed
@rolfbjarne rolfbjarne deleted the allow-selfcontained-without-runtime-identifier branch December 4, 2023 09:00
@jonathanpeppers
Copy link
Member

@marcpopMSFT can we backport this to release/8.0.1xx? It would help me solve a related issue when building net8.0-android projects with a .NET 9 SDK.

@marcpopMSFT
Copy link
Member

/backport to release/8.0.1xx

Copy link
Contributor

github-actions bot commented Dec 6, 2023

Started backporting to release/8.0.1xx: https://github.com/dotnet/sdk/actions/runs/7118004282

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Area-External untriaged Request triage from a team member
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants