-
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
Import RuntimeIdentifierInference targets after workloads #18639
Import RuntimeIdentifierInference targets after workloads #18639
Conversation
I couldn't figure out the best area label to add to this PR. If you have write-permissions please help me learn by adding exactly one area label. |
We currently don't use / recommend the |
@jonathanpeppers @rolfbjarne Have you tried testing this yet w/ your workloads? |
I think we can go with this, and if something breaks we should be able to use I don't immediately see anything that would break in the Android workload. |
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.
The change looks fine. The workload owners seem to be the most impacted by the change so I'll defer to their judgement
Builds were failing with: error NETSDK1031: It is not supported to build or publish a self-contained application without specifying a RuntimeIdentifier. You must either specify a RuntimeIdentifier or set SelfContained to false. This seemed to be caused by reordering such as: dotnet/sdk#18639 In the past, we weren't actually overwriting `$(SelfContained)` *at all*, and with these changes we now are. I set this value in the days of .NET 5. We should just remove where we set `$(SelfContained)` and let the dotnet/sdk manage this value.
Builds were failing with: error NETSDK1031: It is not supported to build or publish a self-contained application without specifying a RuntimeIdentifier. You must either specify a RuntimeIdentifier or set SelfContained to false. This seemed to be caused by reordering such as: dotnet/sdk#18639 In the past, we weren't actually overwriting `$(SelfContained)` *at all*, and with these changes we now are. I set this value in the days of .NET 5. We should just remove where we set `$(SelfContained)` and let the dotnet/sdk manage this value.
Fixes: dotnet/java-interop#854 Changes: dotnet/installer@e8b3b6b...9c46371 % git diff --shortstat e8b3b6be...9c463710 103 files changed, 2301 insertions(+), 2757 deletions(-) Changes: dotnet/linker@a07cab7...460dd6d % git diff --shortstat a07cab7b...460dd6dd 84 files changed, 2403 insertions(+), 258 deletions(-) Changes: dotnet/runtime@02f70d0...96ce6b3 % git diff --shortstat 02f70d0b90...96ce6b3535 2586 files changed, 123677 insertions(+), 34433 deletions(-) Changes: dotnet/java-interop@a5ed891...4fb7c14 * dotnet/java-interop@4fb7c147: [build] set $(DisableImplicitNamespaceImports) by default (#859) * dotnet/java-interop@855ecfa3: [generator] Don't generate unexpected NRT types like `void?` (#856) * dotnet/java-interop@4a02bc32: Revert "[Xamarin.Android.Tools.Bytecode] hide nested types (#827)" (#855) * dotnet/java-interop@95c9b79d: [generator] Avoid 'error (…):' construct in diagnostic messages (#851) * dotnet/java-interop@7c4f7db0: [build] Bump to Mono with MSBuild 16.10 (#848) * dotnet/java-interop@0227cdae: [generator] Gracefully handle BindingGeneratorException. (#845) * dotnet/java-interop@ce1750fd: Add SECURITY.md (#846) Context: dotnet/runtime#55384 Context: dotnet/sdk#18639 Updates: * Microsoft.Dotnet.Sdk.Internal: from 6.0.100-preview.7.21327.2 to 6.0.100-rc.1.21369.3 * Microsoft.NET.ILLink.Tasks: from 6.0.100-preview.6.21322.1 to 6.0.100-preview.6.21366.2 * Microsoft.NETCore.App.Ref: from 6.0.0-preview.7.21326.8 to 6.0.0-rc.1.21368.1 dotnet/runtime#55384 broke how .NET 6 interacts with `AndroidClientHandler`. Fix this by introducing a new `Xamarin.Android.Net.AndroidMessageHandler` type for use on .NET 6, and update the .NET 6 `AndroidClientHandler` to delegate to `AndroidMessageHandler`. `AndroidMessageHandler` doesn't exist on Legacy. Update `.apkdesc` files: * `BuildReleaseArm64SimpleDotNet` is ~37KB smaller * `BuildReleaseArm64XFormsDotNet` is ~62KB larger. Update `tests/api-compatibility/api-compat-exclude-attributes.txt` so that `T:System.Runtime.CompilerServices.CompilerGeneratedAttribute` is ignored. `[CompilerGeneratedAttribute]` is emitted as part of C# 3 "auto-props": public T Property { get; set; } Converting this into a "real" property: T value; public T Property { get => value; set => this.value = value; } results in the `_CheckApiCompatibility` target complaining about an API break. We don't care; ignore `[CompilerGeneratedAttribute]`. Remove `$(SelfContained)` property: early on in .NET 5 (yes 5) development, the Xamarin.Android SDK needed to specify `$(SelfContained)` by default in order to produce `.apk` files. After we became a proper workload, setting the value became unnecessary. It also didn't actually do anything because dotnet/sdk overwrote the value. Starting in dotnet/sdk#18639, `Microsoft.NET.RuntimeIdentifierInference.targets` is now being imported *after* a workload, which meant that dotnet/sdk no longer overwrote our `$(SelfContained)` value, which broke things: error NETSDK1031: It is not supported to build or publish a self-contained application without specifying a RuntimeIdentifier. You must either specify a RuntimeIdentifier or set SelfContained to false. We can simply remove `$(SelfContained)` now, and rely on dotnet/sdk to set this value. Co-authored-by: Jonathan Peppers <[email protected]> Co-authored-by: Steve Pfister <[email protected]>
Fixes: dotnet/java-interop#854 Changes: dotnet/installer@e8b3b6b...808795c % git diff --shortstat e8b3b6be...808795cc 102 files changed, 2218 insertions(+), 2674 deletions(-) Changes: dotnet/linker@a07cab7...9ecf5bd % git diff --shortstat a07cab7b...9ecf5bd2 81 files changed, 2122 insertions(+), 246 deletions(-) Changes: dotnet/runtime@02f70d0...8d3afa3 % git diff --shortstat 02f70d0b...8d3afa3a 2518 files changed, 122843 insertions(+), 33676 deletions(-) Changes: dotnet/java-interop@a5ed891...4fb7c14 * dotnet/java-interop@4fb7c147: [build] set $(DisableImplicitNamespaceImports) by default (#859) * dotnet/java-interop@855ecfa3: [generator] Don't generate unexpected NRT types like `void?` (#856) * dotnet/java-interop@4a02bc32: Revert "[Xamarin.Android.Tools.Bytecode] hide nested types (#827)" (#855) * dotnet/java-interop@95c9b79d: [generator] Avoid 'error (…):' construct in diagnostic messages (#851) * dotnet/java-interop@7c4f7db0: [build] Bump to Mono with MSBuild 16.10 (#848) * dotnet/java-interop@0227cdae: [generator] Gracefully handle BindingGeneratorException. (#845) * dotnet/java-interop@ce1750fd: Add SECURITY.md (#846) Context: dotnet/runtime#55384 Context: dotnet/sdk#18639 Updates: * Microsoft.Dotnet.Sdk.Internal: from 6.0.100-preview.7.21327.2 to 6.0.100-preview.7.21369.5 * Microsoft.NET.ILLink.Tasks: from 6.0.100-preview.6.21322.1 to 6.0.100-preview.6.21365.1 * Microsoft.NETCore.App.Ref: from 6.0.0-preview.7.21326.8 to 6.0.0-preview.7.21368.2 dotnet/runtime#55384 broke how .NET 6 interacts with `AndroidClientHandler`. Fix this by introducing a new `Xamarin.Android.Net.AndroidMessageHandler` type for use on .NET 6, and update the .NET 6 `AndroidClientHandler` to delegate to `AndroidMessageHandler`. `AndroidMessageHandler` doesn't exist on Legacy. Update `.apkdesc` files: * `BuildReleaseArm64SimpleDotNet` is ~37KB smaller * `BuildReleaseArm64XFormsDotNet` is ~62KB larger. Update `tests/api-compatibility/api-compat-exclude-attributes.txt` so that `T:System.Runtime.CompilerServices.CompilerGeneratedAttribute` is ignored. `[CompilerGeneratedAttribute]` is emitted as part of C# 3 "auto-props": public T Property { get; set; } Converting this into a "real" property: T value; public T Property { get => value; set => this.value = value; } results in the `_CheckApiCompatibility` target complaining about an API break. We don't care; ignore `[CompilerGeneratedAttribute]`. Remove `$(SelfContained)` property: early on in .NET 5 (yes 5) development, the Xamarin.Android SDK needed to specify `$(SelfContained)` by default in order to produce `.apk` files. After we became a proper workload, setting the value became unnecessary. It also didn't actually do anything because dotnet/sdk overwrote the value. Starting in dotnet/sdk#18639, `Microsoft.NET.RuntimeIdentifierInference.targets` is now being imported *after* a workload, which meant that dotnet/sdk no longer overwrote our `$(SelfContained)` value, which broke things: error NETSDK1031: It is not supported to build or publish a self-contained application without specifying a RuntimeIdentifier. You must either specify a RuntimeIdentifier or set SelfContained to false. We can simply remove `$(SelfContained)` now, and rely on dotnet/sdk to set this value. Co-authored-by: Jonathan Peppers <[email protected]> Co-authored-by: Steve Pfister <[email protected]>
Reorder RuntimeIdentifier inference to go after workload imports, to allow workloads to set a default RuntimeIdentifier. Fixes #18354
@rolfbjarne @jonathanpeppers @akoeplinger This looks like a simple change, let's see if it breaks anything.
@pranavkm this reorders the import of Microsoft.NET.RuntimeIdentifierInference.targets to happen after the import for Microsoft.NET.Sdk.Razor.BeforeCommon.targets. Do you think this is likely to break the Razor SDK?