【问题标题】:Does referencing .net standard lib from full require shipping system.* assemblies从完整引用 .net 标准库是否需要运输系统。* 程序集
【发布时间】:2017-03-26 21:38:04
【问题描述】:

我注意到在我的 .net 完整项目 (4.6.1) 中引用了一个 .net 标准库 (1.4) 后,我的输出文件夹中充满了 System.*.dll 程序集。

这是否意味着,如果我以完整框架为目标但引用 .net 标准库,我必须附带它使用的所有系统库的 .net 标准版本?

【问题讨论】:

  • 随机问题:您是否尝试在构建后对文件进行 nuking 以查看它是否仍然有效?我的猜测会是只要你不期望任何工作都可以删除它们......(即不要那样做)
  • 他们似乎确实需要让它工作,这不是我们所期望的。 PCL 的行为并非如此。这使我们的部署变得臃肿,让我们重新考虑采用 .net 标准。我预计 .net 标准库将使用 4.6.1 中的系统程序集。看到微软声称它是兼容的。
  • 好吧,它是兼容的……你已经“满”了,你正在使用库……
  • 不是真的,您实际上并没有使用 4.6.1 中的 BCL,只是运行时。这是兼容的一个非常奇怪的定义。在我看来,它只有在你更换一半的系统并不真正兼容的情况下才有效。
  • 我希望我在引用它们的方式上做错了什么。

标签: c# .net .net-standard .net-standard-1.4


【解决方案1】:

通常当你创建一个 .NET 标准库时,你想做Multi-targeting。在您的 .csproj 文件中,您将更改您的

<TargetFramework>netstandard1.4</TargetFramework>

到

<TargetFrameworks>netstandard1.4;net45</TargetFrameworks>

注意将s 添加到标签中。

完成此操作后,为库生成 NuGet 包,该库将直接支持 .net 4.5 和 netstandard。

例如,这里来自Json.NET's csproj file.

<TargetFrameworks Condition="'$(DotnetOnly)'==''">net45;net40;net35;net20;netstandard1.0;netstandard1.3;portable-net45+win8+wpa81+wp8</TargetFrameworks>

因此,它将为 .NET 4.5、.NET 4.0、.NET 3.5、.NET 2.0、netstandard 1.0、netstandard 1.3 和一个针对 net45、win8、wpa81 和 wp8 的 PCL 库生成 DLL,所有这些 dll 都会被打包到 NuGet 包中,并且在您引用包时只使用最接近的匹配项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-01
    • 2021-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多