-
Notifications
You must be signed in to change notification settings - Fork 391
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
How to clarify distinction between .NET Core and .NET Standard library project templates #1909
Comments
.NET Core has more APIs than .NET Standard (e.g. this list), so there is use case for just that. You could argue it is less common, but we should acknowledge it as an option (e.g. breaking larger .NET Core project into components). I think the most valuable discussion is how to avoid developer's confusion and lead him/her to make the right choice (without being expert on all .NET Standard vs. .NET Core things). How can we improve current experience to make it happen? From offline discussion with @terrajobst (apparently there have been a dozen of threads on this topic in the past 6-12 months): Problem as I understand it: Is that fair summary of the problem or would you change it / twist it? Or am I missing some angles? |
For context I added query of APIs approved and closed=implemented in .NET Core (~100) - they are by design not in .NET Standard, because they are not in .NET Framework 4.6.1 (it shipped before we added them into .NET Core and we didn't backport anything yet to Desktop) @weshaggard do you have API surface diff between .NET Standard and .NET Core? I can't find it in standard repo. |
It does make sense why you may want to create a .NET Core-specific library given the expanded API surface area of .NET Core over .NET Standard.
Yes, I think that hits it on the nose. The underlying cause of confusion is over the terms ".NET Core" and ".NET Standard" (and their associated netcoreapp/netstandard monikers). It can be especially confusing because you can't use cross-platform as a distinguishing factor since they're both cross-platform. A lot of developers aren't going to care or understand the subtlety of the runtime vs. a standard API contract.
Those terms obviously aren't going anywhere, so the goal should be to clarify what they mean. The trick is communicating that .NET Core and .NET Framework are analogous but .NET Standard is something else entirely that encompasses both. Perhaps merely adding ".NET Standard (.NET Core and .NET Framework)" to the template category would help (though that makes the category name kind of long). It also doesn't make it any clearer that .NET Framework project templates are under the goofy "Windows Classic Desktop" category. |
Thanks for confirmation of the problem description @daveaglick! I had 2 ideas in mind:
[1] is not technically feasible. Thoughts? Other suggestions? Wording suggestions? |
Just a quick 2c - what if you renamed the top-level template categories to make it obvious what is and is not a "platform" by using that term. My ideal top-level categories would go something like:
I personally don't like Windows Classic Desktop (which is why I renamed it to .NET Framework Platform above), but that might need to stay for reasons. In that case, maybe it could be Windows Classic Desktop Platform. I personally think using the term "Platform" after the runtimes and then "(All Platforms)" for .NET Standard makes it at least a little clearer, and more obvious than just tweaking the descriptions. |
Personally I am not thrilled about the new names. They are long. I like shorter names. What about .NET Standard -> .NET Standard (All Platforms)" on its own? Disclaimer: I am not decision maker on this topic, not even expert, just voicing my private opinion as user of the wizards. |
Let's ignore for a second the concrete issue and let's look at the intent and long term goals.
So logically this means that we have:
Code sharing happens in both of these scenarios which is why we provide class library templates for all verticals: Long term, I'd like us to fix the File | New Project (as in: burn it to the ground and build something from scratch). The biggest problem in my opinion is that we have too many class library templates. And that makes it very hard for people to decide what to use. At the minimum, this could be like ASP.NET i.e. a single template with dialog afterwards. But ideally, the New Project dialog would be a cascading set of choices that guide you towards the right outcome with no following dialog. |
Sounds like @terrajobst is more developer than manager these days. 😆 |
Quick fix, stick In Core
In Classic Desktop
In .NET Standard
In Windows Universal
etc... |
@benaadams check my answer above #1909 (comment) [1] -- sadly, it is technically ugly and non-trivial :( (at least I have been told) |
Doesn't ntfs have symbolic links these days? 😉 |
@Mike-EEE
Hate to disappoint 😄 To be honest, you might not like the dialog because I don't think it will involve a XAML-based data model 😈 |
We considered this, but it has the problem that the nodes on the left are like physical file folders, i.e. the template has to be duplicated. That wouldn't be a big deal (besides duplication in VS) but it means that searching for class library in the top right would now also list them multiple times. |
@terrajobst argh, uglier than I thought - the multiple entries is a very good point ... I hate it when we are limited by technical limitations like this one :( |
haha OK, I deserved that, @terrajobst. 👼 |
Can't speak to the complexities of implementing that in File | New Project dialog, but I was told by the VS owners that's it not that simple. Keep in mind that this is also an extension point for third parties that we don't want to break.
That's an interesting idea that I don't think was discussed before. Thinks to consider:
|
Needed to cover the "I do programming its just setting a flag" angle before someone else did 😉
No, as you say, they should be in their own vertical
Would you prefer them to create .NET Standard libraries over .NET Framework libraries? If so then you have to disrupt the flow or they will just keep making .NET Framework libraries only. If the node is called Web developers have to go to a different node already... |
I prefer them to create the library that makes sense for their particular task at hand. I'm writing a ton of libraries myself and not all of them can be .NET Standard libraries.
Agreed, although it was the ASP.NET's team decision to not include any class libraries there as they found that their devs find it more confusing than helpful. |
Reminds me of that famous Beach Boys song... |
Yep, and that's just duplication between two nodes (Cloud and ASP.NET). Imagine what across all verticals would look like for libraries :-) |
That reminds of my favorite 90s song:
🎵 😄🎵😄 🎵😄 🎵😄 🎵 |
I would love to see an asp.net core class library template.. right now you have to know some esoteric concepts like using the web sdk but changing output type to library. |
The mental dissonance of .NET standard "covering" like the image or the "(core and framework)" is counter to its actuality in being a narrower base or common ancestor of both. Trying to explain that well enough to a team with varying skills and abilities can be challenging, and is bound to cause confusion or worse (projects with weird and/or costly bugs that dont accept changing from one to the other nicely - see newly linked issue) ".NET Standard (Core or Framework)", ".NET Base " or even ".NET Common" is far less ambiguous than "Standard" and "Core" . |
@StingyJack Even if you were right that ".Net Standard" is confusing, I really don't think it makes sense to rename it at this point. I think it would cause much more confusion, not less. |
I'm going to close this issue - it seems like the majority of questions were answered. If you have further questions about this, feel free to file bugs over on http://github.com/dotnet/standard |
As brought up on Twitter by @filipw: https://twitter.com/filip_woj/status/847783708262268928
Currently the .NET Core Class Library template in Visual Studio targets netcoreapp and not netstandard. Granted, they are two different things, but why wouldn't anyone want to create a netstandard library when building for .NET Core?
The text was updated successfully, but these errors were encountered: