【问题标题】:What's needed to have a .NET Framework project reference a .NET Standard assembly?让 .NET Framework 项目引用 .NET Standard 程序集需要什么?
【发布时间】:2019-04-02 20:44:31
【问题描述】:

我有一个基于 .NET Framework 4.6.2 构建的项目。它的依赖项之一是针对 .NET Standard 2.0 构建的程序集。

以前在我的旧计算机上构建得很好,但现在我正在设置一个新的开发系统,当我尝试使用相同版本的相同工具运行构建时,我得到一个关于 Netstandard DLL 引用一堆在 .NET Core 中流行的小单命名空间程序集的几十个错误。例如:

无法解析主要引用“Foo”,因为它间接依赖于框架程序集“netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51”,在当前目标框架中无法解析. “.NETFramework,版本=v4.6.2”。要解决此问题,请删除引用“Foo”或将您的应用程序重新定位到包含“netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51”的框架版本。 (MSB3268)

如果我从 GAC 显式添加对 Netstandard 2.0 的项目引用,则错误变为:

主要参考“netstandard”是一个框架程序集,无法在当前目标框架中解析。 “.NETFramework,版本=v4.6.2”。要解决此问题,请删除引用“netstandard”或将您的应用程序重新定位到包含“netstandard”的框架版本。 (MSB3267)

再次,在旧系统上构建(并且仍然构建)没有错误,我正在尝试在完全相同的 IDE 和编译器上构建项目而不进行任何更改。所以我只能假设我缺少需要在我的开发系统上安装的东西,但我不太确定它是什么。

以前有人遇到过这种情况吗?我在这里发现了一些关于尝试从 C# .NET Framework 项目中引用 Netstandard 程序集的其他问题,由于一些与 Roslyn 相关的细节,这显然很棘手,但我实际上在我的 NET Framework 项目中使用了 Boo 语言,所以这些问题都不是特别相关,而且它之前确实工作得很好。

如果我只知道我忽略了哪些细节,这感觉应该有一个非常简单的答案......

【问题讨论】:

  • Framework 4.5 只能引用 Standard 1.0 和 1.1。为了参考标准 2.0,您至少需要使用 Framework 4.6.1。请参阅此handy chart 以供参考。
  • @BradleyUffner 好的,尝试将其重建为 4.6.2。没有变化...
  • 当您说您已经安装了所有东西时,我们无法询问是否缺少安装。但也许它真的缺乏安装?
  • @baruch“安装”什么?
  • @MasonWheeler “我正在设置新的开发系统”

标签: .net msbuild dependency-management .net-standard


【解决方案1】:

.NET 团队一直强烈建议迁移到 net472,因为 plethora of issues 工具链试图将 .NET Standard 2.0 支持改进到 net461–net471。如果升级是您的选择,它将节省大量时间。 .NET Framework 4.7.2 还具有不需要dozens of shim DLLs 出现在您的 bin 输出中的附带好处,当然,任何 .NET Framework 升级都会附带一些小的增强功能。 (发布说明:net47net471net472。)

https://twitter.com/terrajobst/status/1031999730320986112:

抱歉,我们搞砸了。我们试图让 .NET Framework 4.6.1 追溯实施 .NET Standard 2.0。这是一个错误,因为我们没有时间机器,而且存在大量错误。如果您想使用 .NET Framework 中的 .NET Standard 1.5+,我建议您使用 4.7.2。

请注意,这与缺少 API 无关(尽管 .NET Framework 4.6.1 缺少大约 100 个 API)。这完全是关于绑定策略、程序集标识和工具(MSBuild、ClickOnce、测试运行程序等)中框架程序集的处理。

这里学到的教训很简单:一旦发布,给定版本的 .NET 实现不得更改 .NET Standard 的支持级别。 IOW,受支持的 .NET Standard 编号是不可变的属性。支持更高版本需要发布新版本。

【讨论】:

  • 谢谢!将我的项目升级到 Framework 4.7.2 修复了它。我仍然希望我知道是什么导致了问题,但至少现在我可以继续前进。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-01
  • 2018-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-25
相关资源
最近更新 更多