dotnet / standard

This repo is building the .NET Standard
3.07k stars 428 forks source link

Questions about tagging within this repository / future versions #1777

Closed Joe-Sewell-PreEmptive closed 2 years ago

Joe-Sewell-PreEmptive commented 4 years ago

I was looking through this repository to determine if .NET Standard 2.1 libraries support default interface methods - it looks like they do, given the presence of System.Runtime.CompilerServices.RuntimeFeature.DefaultImplementationsOfInterfaces, as well as my own experimenting in VS 2019. It seems I was mistaken when thinking that this was not the case, so I'm glad this repository is easily accessible to determine this.

But while doing this, I found it difficult to determine what commits were included in this particular .NET Standard version. I see that there's a tag v2.1.0-prerelease.19126.1, as well as branches release/2.0.0, release/3.0, and release/3.0-preview9. One of the machines I tested VS 2019 on had a netstandard.dll assembly, itself targeting .NETStandard v2.1.0, with AssemblyInformationalVersion 1.1.0+a5b5f2e1e369972c8ff1e2183979fab6099f52ef; this commit is part of the release/3.0 branch. However, another machine had a same-named assembly, targeting .NETCoreApp v3.0 and AssemblyInformationalVersion 3.0.0+4ac4c0367003fe3973a3648eb0715ddb0e3bbcea, and I don't see that commit hash in this repository.

Additionally, this blog post states that 2.1 will be the last version, but there is another prerelease tag v2.2.0-prerelease.19564.1 and on GitHub it's labelled .NET 5.0 Preview 2.

So I have a few questions for understanding this repository:

  1. Since .NET Standard 2.1 is released, are there plans to continue development in this repository for e.g. the shared BCL going forward with .NET 5+?
  2. Are there multiple kinds of netstandard.dll for a single .NET Standard version? E.g. are there separate versions for .NET Framework to reference and for .NET Core / .NET 5+ to reference?
  3. Do the tags / branch names in this repository correspond to a .NET Standard version or something else?
  4. It looks like there are patch releases; are there patch versions of a single .NET Standard version?
  5. Are there other repositories which are being used to create netstandard.dll?
  6. Is there a way to determine, from the repository, which commit is the one used for a given release?

Thank you for your consideration.

terrajobst commented 2 years ago

Closing as we don't plan to ship additional versions of .NET Standard.

  • Since .NET Standard 2.1 is released, are there plans to continue development in this repository for e.g. the shared BCL going forward with .NET 5+?

No, see The Future of .NET Standard.

  • Are there multiple kinds of netstandard.dll for a single .NET Standard version? E.g. are there separate versions for .NET Framework to reference and for .NET Core / .NET 5+ to reference?

Yes and no. There is a single reference assembly for a given .NET Standard version that defines the API surface. That's the DLL you compile against when you target .NET Standard.

In addition, each implementation of .NET Standard ships their own version of netstandard.dll which contains type forwards to the assemblies that implement it. .NET Framework has one, .NET Core has one, and so does Mono.

  • Do the tags / branch names in this repository correspond to a .NET Standard version or something else?

We don't really use tags because our release build build process is complicated and spans multiple repos. We do, however, use branches in order to stabilize and take changes deliberately. Often, these are cherry picked commits or ported by hand, depending on complexity.

  • It looks like there are patch releases; are there patch versions of a single .NET Standard version?

Patches for .NET Standard wouldn't change API versions but only build/packaging issues. And yes, we have made those changes.

  • Are there other repositories which are being used to create netstandard.dll?

The reference assembly is built here, however each implementation will also have to build theirs. For .NET Core this being done in dotnet/runtime.

  • Is there a way to determine, from the repository, which commit is the one used for a given release?

I don't believe so.