构建 .NET Framework/.NET Standard 多目标项目时 net461 输出文件夹中的大量程序集

Large number of assemblies in net461 output folder when building .NET Framework/.NET Standard multitargeting project

我有一个针对多个框架的新 SDK 样式的 csproj:

<TargetFrameworks>net461;netstandard2.0</TargetFrameworks>

VS 中的依赖项节点按预期列出“.NETFramework 4.6.1”和“.NETStandard 2.0”- NETStandard 文件夹具有 'NETStandardLibrary' 作为 SDK 依赖项。

我对多个 TFM 的理解是交叉编译 class 库以用作完整框架 dll 或网络标准 dll。但是,在 net461 输出文件夹中我看到 100+ System.xxx.dll,包括 netstandard.dll.

为什么所有这些程序集都在输出中?还是我误解了多目标框架的概念?

这个问题在 DotNet Standard 回购中的几个问题中有详细描述。简短的解释是:

The reason is that net471 is the first .NET Framework to actually contain netstandard20 APIs- the others use shims

这意味着每次引用 .NETStandard nuget 包时,如果 .NET Framework 的版本低于 v4.7.1,它将提取整个 .NETStandard 程序集。