-
Notifications
You must be signed in to change notification settings - Fork 9
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
Create new packages to allow for side-by-side version installs and adjust naming for 5.0 #45
Comments
Fully agree. Given the servicing model of .NET Core, there should be separate package ids for each major.minor family. This would e.g. enable easy, automatic patching of the runtime in environments where you want to be most up to date and secure, but need to support a set of .NET Core families (build servers, hosting platforms such as Service Fabric) and/or remain on a given family even if it is not the newest one. |
Now would be a good time to start working on this, given that previews of .NET 5.0 have started appearing. |
Going forward, I would even consider dropping "core" from the package ids for 5.0+. |
This approach could also make the package implementation simpler and more reliable, in cases such as when a given family introduces a new component or has different dependencies - this is very awkward to handle in the current AU streams-based approach. |
Additional suggested packages: dotnetcore2-lts - alias for dotnetcore2.1 Further, how should the package identifiers be formatted? dotnetcore3.1 |
I'd be happy to take a bash at this, pending confirmation from the maintainers as to what packages they want and the naming formats. However I don't know anything about choco, so not sure how long it would take me. |
Naming is the hardest part |
@riezebosch and @IanKemp I would simply do it as i did in the original posting above. dotnetcore1.0 each of the above represents a separate package. All security patches/bug fixes go into the correct package. For Example: a security fix is done for 1.1. Therefore this version would have the following package versions dotnetcore1.1 |
but then we have also dotnetcore-runtime, dotnetcore-runtime.install, dotnetcore-runtime.portable, dotnetcore-sdk, dotnetcore-runtimepackagestore,dotnetcore-windowshosting, ... |
Here is my proposal for our course of action:
As seen on https://chocolatey.org/packages/dotnetcore-runtime.portable#versionhistory, the download counts on various versions of dotnetcore-runtime.portable are very low, most below 200. The respective .install download counts are mostly in the 4000-10000 range (https://chocolatey.org/packages/dotnetcore-runtime.install#versionhistory). Looking at this from another angle - the original incentive to publish both .portable and .install was based on the assumption that there would be a major difference in behavior: the native installer used in .install would overwrite the systemwide .NET Core instance with the current version (similarly to how .NET Framework 4.x behaved), while the .portable packages would provide the side-by-side ability. That assumption turned out to be false - there is no such thing as one systemwide .NET Core instance; all runtime versions can install side-by-side*. (*As a user convenience, the installer for 3.x by default removes earlier patch versions of the same major.minor runtime family, which is normally a good thing, but can be turned off for some special scenarios.) Therefore, in order to simplify the package names I would drop the .install suffix and stop publishing .portable.
The new packages should be built for .NET Core 2.1, 3.1 and .NET 5.0. Other versions are out of support and we do not need to put any effort into making new packages for them.
As discussed here earlier, each major.minor .NET version should be a separate package family. This aligns with default native runtime installer behavior (since 3.0) which removes older patch versions. From Chocolatey user standpoint, it makes I would use these patterns for package names: With $subpackage being: All of these "subpackages" map naturally to Microsoft-published installers. As we know from experience, there is, unfortunately, some component overlap between the native installers ( I prefer to include the dash before the version number for slightly better readability.
There is one wrinkle regarding windowshosting (the "Hosting Bundle"). The unique component installed by it, not included in any other installer, is the ASP.NET Core Module (ANCM) for IIS. Contrary to the runtime and sdk, ANCM is in fact installed systemwide with no side-by-side capability. To complicate matters even further, .NET Core 1.0-2.1 used ANCM v1, while from 2.2 onward ANCM v2 is used. Both ANCM variants are independent of each other (install in separate places). Within each ANCM variant, each new version overwrites the previous one. So, if we wanted to faithfully reflect the above in the packaging, we would need to craft two packages: one for ANCM v1, the other for v2, not aligned with the package families described above. This would, however, make maintenance harder (we would need to be on the lookout for possible new ANCM variants) and make Given that ANCM versioning seems like an implementation detail, and that there is no separate installer for ANCM (only the Hosting Bundle, which is bound to a specific major.minor .NET family), let's just forget about these concerns and give -windowshosting the same treatment as other subpackages.
We have these currently: The There was also a suggestion for LTS metapackages; those could be named |
Given the SDK versioning scheme described in https://github.com/dotnet/designs/blob/main/accepted/2018/sdk-version-scheme.md, the SDK packages should perhaps follow their own versioning, with each SDK feature release (A.B.Cxx) having its own package. This would, in fact, align with the current practice in the I'm also toying with the idea of SDK metapackages reflecting support for various Visual Studio versions. For example, for 3.1, the relationship between SDK and VS version is:
which is rather straightforward, but it might still benefit some users to be able to tell choco to install something like |
.NET 5 probably deserves a package id change, but this is a stopgap measure, until #45 is done.
I probably have time in the upcoming weeks te setup a few things. In my opinion the |
Yes, I wouldn't dream of maintaining these packages without AU. |
Just stumbling in from the discussion on the chocolatey page Shouldn't .Net 5.0 be named |
The hosting bundle is a rather difficult customer. It installs one unique component (the ASP.NET Core Module for IIS, ANCM), but it also installs the base runtime and the ASP.NET Shared Framework (what used to be called the Runtime Package Store, but its scope has grown, I guess). Those two latter components overlap with other packages ( There is no notion of "optional dependencies" in Chocolatey. A normal dependency (from There are two ways, I think, we could approach the optional dependencies issue.
The hosting bundle would then mirror the default behavior of the native installer. Users wanting a subset of the components would not use the hosting bundle package, but would have the ability to install each component separately, using the appropriate package.
This would be less convenient to users (need to learn package parameters, not able to install this one together with other packages in one choco invocation, reduced dependency opportunities). On the other hand, it would reduce the risk and require less oversight and maintenance. |
@wertzui That's an interesting suggestion. I believe, however, that names such as And the earlier Target Framework Monikers for .NET Core are actually |
A couple of design matters to think about and decide:
|
Implemented:
|
Upon much thought, changed This makes -windowshosting installation safer and predictable, because it will not suddenly install ANCM from a later release.
Also - implemented |
Implemented |
Restricting -windowshosting installation due to ANCM dependency conflict does not currently seem to behave as expected; possibly due to bug/shortcoming in choco (chocolatey/choco#116). |
Built nupkgs for all 2.0+ runtime components (not including ANCM/windowshosting yet) and sdks released to date (except for those few with metadata missing in json) - available for testing on MyGet feed mentioned above. 306 nupkgs total. |
Implemented metapackages:
|
|
Here is a full list of new packages:
|
Looks great, wasn't aware you guys already had spotted the need. |
I think this can be finally considered done. |
We should create the following new chocolatey packages to allow for people to install multiple versions of dotnetcore side-by-side.
dotnetcore1.0
dotnetcore1.1
dotnetcore2.0
dotnetcore2.1
dotnetcore2.2
dotnetcore3.0
If you don't do this then chocolatey can really only manage 1 version of the dotnetcore package at a time which is not ideal.
The text was updated successfully, but these errors were encountered: