-
Notifications
You must be signed in to change notification settings - Fork 4.8k
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
[Breaking Change] Improving .NET Core Version APIs #12124
Comments
Was it ever a consideration to create a new API for this? Obviously that has pro's and con's, but at least that would allow backporting to earlier versions, right? |
We do not back port new APIs to earlier versions. The only exceptions may be critical bugs like security fixes. |
No. We want to avoid a trail of tears of APIs that were once thought to be great and came to disappoint us. Instead, we make carefully considered breaks in major releases. It's a choice, but we think the right choice for the long-term sustainability of the platform. Our roll-forward policy aligns with this approach (no auto roll-forward on major version). |
|
Discussed in https://github.com/dotnet/coreclr/issues/22845 |
Let's say, I am library developer and want to target my library as .net standard 2.0 and at run-time determinate framework version. For sake of argument, I only care if version is .net core and version >= 3.0 Looks like I can differentiate between .NET Core and Full framework by checking for ".NET Core", but how I can differentiate pre-3.0 from future 4.6+ versions? Why not make it "NET Core 4.6.27415.71 (2.1.x)", "NET Core 4.6.27415.71 (3.0.0)" and "NET Core 4.6.27415.71 (4.6.x)", etc.. This way it won't be ambiguous. |
We have a solution in mind for this problem that we're still working on. Will share shortly. |
PTAL https://devblogs.microsoft.com/dotnet/introducing-net-5/ |
So this is right way to check for .net core 3.0+?
Note, I am a bit sarcastic, because this looks like a hack. Is any better way to do this in NS2? |
@richlander is there activity here that is likely to result in this being closed for July 1st? That's the cutoff for zero bugs for 3.0. If not we should move to Future. |
Nothing left to do. |
@richlander I'm trying to understand the best way to update existing code that detects .NET Core to add support for .NET 5.0+. Specifically, looking at the csharp implementation of grpc/grpc in Grpc.Core.Internal.PlatformApis, is it be reasonable to replace: isNetCore = RuntimeInformation.FrameworkDescription.StartsWith(".NET Core"); with: isNetCore = RuntimeInformation.FrameworkDescription.StartsWith(".NET Core") ||
RuntimeInformation.FrameworkDescription.StartsWith(".NET") && Environment.Version.Major >= 5; If I understand the changes above correctly, this should work for all .NET Core runtimes, past, present and future. |
I don't think you need the second RI.FD check. Check this out: https://gist.github.com/richlander/3f9bd226acaa3c8e080e1945e7407bc3 |
Also,
|
I updated the sample above to align with Jan's feedback and included the specific check. |
[Breaking Change] Improving .NET Core Version APIs
We are improving the .NET Core version APIs in .NET Core 3.0. The particular changes we made are technically breaking. The changes are currently only in the master branch, so will be part of .NET Core 3.0 Preview 4, modulo feedback.
Also posted at dotnet/corefx #35573
Related:
Goal
The goal of the improvement is to enable access to accurate and precise product version information, like is displayed in the following example:
Code: https://gist.github.com/richlander/f5849c6967c66d699301f75101906f99
Existing Behavior
The product (as of .NET Core 3.0 Preview 3) does not provide the version information displayed above, but seemingly arbitrary values, as displayed in the following example (using the same code):
C:\testapps\versioninfo>dotnet run
.NET Core version:
Environment.Version: 4.0.30319.42000
RuntimeInformation.FrameworkDescription: .NET Core 4.6.27415.71
CoreFX Build: 4.7.0-preview4.19113.15
CoreFX Hash: add4cac
Note: These version strings are based on the .NET Framework heritage of the product.
Breaking Change
The change is technically breaking because it resets the versioning scheme of the product as reported by these APIs. Some code somewhere will break, however, we do not expect that to be pervasive. Unfortunately, it will be hard to write code that works with both the new behavior and old behavior given how close the values are.
We should never have shipped .NET Core 1.0 with this behavior to avoid this problem now. We decided that .NET Core 3.0 is likely our last chance to fix these APIs, so decided to take the opportunity now.
Feedback
We would love your feedback.
The text was updated successfully, but these errors were encountered: