-
Notifications
You must be signed in to change notification settings - Fork 1.1k
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 PublishAot without RuntimeIdentifier. Fixes #33414. #35366
Add escape hatch for PublishAot without RuntimeIdentifier. Fixes #33414. #35366
Conversation
…et#33414. This adds an escape hatch for a sanity check when trying to use PublishAot 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, and that fails the build. I attempted to unset PublishAot for the outer build, but that doesn't work for two reasons: * It can't be unset if customers pass /p:PublishAot=true on the command line. * The package restore won't restore the NativeAOT packages nor include them in the build, and thus effectively NativeAOT is turned off for the inner builds as well, even if we set PublishAot=true for them. So instead add an escape hatch for the sanity check. Fixes dotnet#33414.
These new properties requires a downstream SDK to do the right thing, they won't work out-of-the box.
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.
LGTM, thank you for making a PR with a fix. I'm sorry I did not get to the issue in a timely manner. This is a smart way to go about it.
Keep in mind this will only go into .NET 9, you would need to target the 8.0-rc branches (new one is being created tonight/tomorrow morning) to get it in sooner. |
/backport to release/8.0.1xx |
Started backporting to release/8.0.1xx: https://github.com/dotnet/sdk/actions/runs/6228417168 |
This adds an escape hatch for a sanity check when trying to use PublishAot 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):
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, and that fails the build.
I attempted to unset PublishAot for the outer build, but that doesn't work for two reasons:
So instead add an escape hatch for the sanity check.
Fixes #33414.