You haven’t done anything wrong, this is about to happen. If you want your new DLL to be added to a new .NET Framework project, you need to target the .NET Standard 2.0 for your library, expecting a version of the .NET Framework that natively supports both the API and the build version. for 4.7.2 (while the .NET Framework 4.7.1 supports all APIs, there were errors in how some assemblies were versions, and therefore the toolkit (VS 2017 15.5+) will add additional assemblies to fix this).
What you see is a side effect of creating the .NET standard and supporting supported frameworks. It also depends on the standard version of .NET you choose and the tools used to reference the library package.
In .NET Standard <2.0, you refer to the NETStandard.Library meta-package, which, in turn, refers to additional packages ( System.* ). These packages contain reference assemblies that make up the "Standard .NET Standard Contract" - a set of APIs and assembly names + versions.
When the NuGet package that you create for .NET Standard 1.0-1.6 then references the application, these individual packages do not result in link assemblies, but rather an implementation assembly for the framework that the application is aimed at.
For .NET Core, they correspond to assemblies that are already part of the runtime, so DLL files will not be located next to the embedded application. However, this changed when the new package package for .NET Core 1.1 ( NETStandard.Library version 1.6.1) was released. This led to the creation of applications built for .NET Core 1.0, which resulted in new builds for implementation that were to be included in .NET Core 1.1 (fortunately, version 1.1 used "long-term support" because it caused discussion about which builds are part of the LTS promise).
In the .NET Framework, these libraries (with a few exceptions, such as System.Net.Http ) do little - they simply forward system assemblies. So, for example, a “contract” defines that System.Object is defined in the System.Runtime.dll assembly. Thus, the System.Runtime.dll file that you get into the .NET Framework application contains System.Runtime.dll , which contains the type forward to.NET Framework mscorlib.dll .. Core Core already contains another System.Runtime.dll that does something different for this platform. This mechanism allows one DLL file to work on both platforms, because these types of forward and additional implementations provide the same "contract" (types + assemblies or assemblies) that work on both implementations.
.NET Standard 2.0 aims to reduce the number of packages and DLLs required, as well as to remove the required updates to NETStandard.Library when releasing a new version of .NET Core.
So, for .NET Standard 2.0 and .NET Core 2.0, the NETStandard.Library package contains only link assemblies for compiling the code for the project, but the resulting NuGet package no longer depends on this package. Therefore, when you create a library targeting .NET Standard 2.0 and publish it, it will not have NuGet dependencies (unless you add additional ones).
The logic of what “support libraries” to enter when using the .NET Standard library has been transferred to the snap-in that is used during assembly. Therefore, when the library containing the link to netstandard.dll is added to the .NET Framework project, the toolkit then adds the necessary support DLLs based on the version of the .NET Framework used. This was done for .NET Standard 2.0, as well as for .NET Standard 1.5+, because the .NET Framework 4.6.1 was retroactively compatible with .NET Standard 2.0 (previously 1.4) using these DLL files. The same tool also ensures that even if NuGet packages are somehow included in such an application project, any .NET Standard implementation libraries created through NuGet are removed from the assembly. Therefore, if you reference the .NET Standard 1.0 NuGet package that was created when .NET Core 1.0 was released, all of its NuGet dependencies are truncated, and instead you get the support libraries that come with the build tools.
The idea was that the .NET Framework 4.7.1 would contain all the necessary "inbox" assemblies, so netstandard.dll , System.Runtime.dll , etc. are part of the .NET Framework and any .NET Standard 1.0-2.0 DLL file will just work, the problem is that these inbox DLLs had a too low version number for some assemblies, so the libraries could not load - this was fixed by changing the toolkit again to include DLL files with higher version numbers as library support, which in turn go to the .NET Framework inbound assemblies. This is planned to be installed in the .NET Framework 4.7.2.