【发布时间】:2017-11-08 16:00:02
【问题描述】:
我有一个针对多个框架的新 SDK 样式 csproj:
<TargetFrameworks>net461;netstandard2.0</TargetFrameworks>
VS 中的依赖项节点按预期列出了“.NETFramework 4.6.1”和“.NETStandard 2.0” - NETStandard 文件夹将“NETStandardLibrary”作为 SDK 依赖项。
我对多个 TFM 的理解是交叉编译类库以用作完整框架 dll 或 netstandard dll。但是,在 net461 输出文件夹中,我看到 100+ System.xxx.dll,包括 netstandard.dll。
为什么所有这些程序集都在输出中?还是我误解了多目标框架的概念?
【问题讨论】:
-
这是因为有一些System.XXX.dll是在4.6.1中找到的,而在2.0中没有,所以自然要一起复制,否则会丢失这些文件。我能想到的一个例子是 System.IO.Compression 命名空间 2.0 msdn.microsoft.com/en-us/library/… 4.6.1 msdn.microsoft.com/en-us/library/… 请注意,4.6.1 比 2.0 有更多的东西,如果您要在 2.0 中使用 4.6.1 项项目,它不会工作,唯一的方法是让 2.0 引用 4.6.1 dll
-
我说的是与这种情况相反的情况 - System.*.dll 正在与 net461 构建一起输出......即使所有(大多数?)这些 API 都内置在框架中。 Jacek 下面关于垫片的回答解释了这一点。
标签: c# packages .net-standard .net-standard-2.0 .net-4.6.1