Closed LakshanF closed 2 years ago
@LakshanF could you milestone the issue and remove untriaged? It shows up in queries.
Incorporating @sbomer suggestions below
The native AOT application publishing experience is outlined below for supported scenarios for PublishAot property and when an explicit package reference to Micsoroft.dotnet.ilcompiler
is present
Publishing a native AOT application requires 2 external packages, Micsoroft.dotnet.ilcompiler
(hereafter referred as build package) and platform dependent one, runtime.<RID>.microsoft.dotnet.ilcompiler
(hereafter referred as runtime package).
The options below take different paths to acquire the packages.
PublishAot
property is set to true in the project or elsewhere AND no explicit reference to the build package in the application.
ProcessFrameworkReferences
will use version information - $(MicrosoftNETCoreAppRuntimePackageVersion),
set in GenerateBundledVersions.targets - to download the runtime packagePublishAot
property is set to true in the project or elsewhere AND an explicit reference to the build package is in the application.
ILCompiler
package. For example, to get a bug fix that is not yet present in the SDK ILCompiler
package versions.ProcessFrameworkReferences
will use the same version as the build package version information to download the runtime packagePublishAot
property is not set AND an explicit reference to the build package is in the application
PublishAOT
property setting as described aboveProcessFrameworkReferences
will use the same version as the build package version information to also download a runtime package that matches the targetPublishAot
property is set to false
These scenarios impose the following requirements
These requirements are currently implemented in the following way
Runtime repo impact The above plan requires taking into account that the package targets will be imported in dotnet build. Specifically, no publish related AOT targets will be invoked during the build process. In addition, Building and running native AOT tests in the runtime repo will continue to work as before. The following repo assets are impacted,
Microsoft.NETCore.Native.targets
.IlcCalledViaPackage
, where the property determines to use the runtime repo assets as opposed to the SDK assets. We would like to remove (see above comment details) this property in a future changePublishAOT
and rely on the SDK: They should not be impacted.SDK repo impact
PublishAOT
package assets are not hardened to work if any non-NativeAOT
assets access them (unlike the trimming assets). I think we should simplify the third scenario to behave either identically to the second (as if PublishAot were set to true), or to not do an AOT publish at all. Since the OOB package scenario is already in use, I would probably make it behave like PublishAot is true.
Setting PublishAot property to false is not supported
I think that setting PublishAot to false should prevent AOT publish, turn off the AOT analyzer, etc, even if there is a package reference.
The PR is getting reverted.
@LakshanF you still had some concerns around this in the meeting. Should we keep open or it's good to close?
I would like to keep this open for a little longer. I need to clean up the tests in SDK and that requires the runtime changes to flow there. Will do that soon.
Validated the test in the rc1 branch, including cross-target scenario without the explicit packages in the project. However, the test will only be updated on the main branch and not on the RC1 branch due to the high bar for changes in the RC1
Given that building a native AOT application is supported only via the SDK (with the option to get the latest ILCompiler* packs via an explicit reference), the publish path with properties, items, tasks, and targets etc., should be cleaned up. The history of this code has been with specific goals that have changed over time,
PublishAot
with backward compatibility support (for a short period) for the explicit package reference without the SDK pathPublishAot
. Explicit package reference takes precedence when one exists (for example, to pick up bug fixes in the package earlier)It should be easy to follow the publishing logic which currently is a little convoluted.
Specifically,