什么';是否需要.NET Framework项目引用.NET标准程序集?

什么';是否需要.NET Framework项目引用.NET标准程序集?,.net,msbuild,dependency-management,.net-standard,.net,Msbuild,Dependency Management,.net Standard,我有一个基于.NETFramework4.6.2构建的项目。它的一个依赖项是根据.NET标准2.0构建的程序集 它以前在我的旧计算机上构建得很好,但现在我正在设置一个新的开发系统,当我尝试使用相同版本的相同工具运行构建时,我得到了几十个关于Netstandard DLL引用一堆在.NET Core中流行的小单名称空间程序集的错误。例如: 无法解析主引用“Foo”,因为它间接依赖于框架程序集“netstandard,Version=2.0.0.0,Culture=neutral,PublicKey

我有一个基于.NETFramework4.6.2构建的项目。它的一个依赖项是根据.NET标准2.0构建的程序集

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

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

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

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

同样,这个构建(现在仍然构建)在旧系统上没有错误,我正在尝试在完全相同的IDE和编译器上构建项目,而不做任何更改。所以我只能假设我遗漏了一些需要安装在我的开发系统上的东西,但我不太确定它是什么

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


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

由于工具链试图在net461–net471上改进.NET标准2.0支持,因此.NET团队一直强烈建议迁移到net472。如果升级是您的一个选择,它将节省大量时间。NET Framework 4.7.2的另一个好处是不需要出现在bin输出中,当然,任何.NET Framework升级都会带来一些小的增强。(发行说明:,)

:

对不起,我们搞砸了。我们试图使.NET Framework 4.6.1追溯性地实现.NET标准2.0。这是一个错误,因为我们没有时间机器,而且有很多错误。如果您想使用.NET Framework中的.NET标准1.5+,我建议使用4.7.2

请注意,这与缺少API无关(尽管.NETFramework 4.6.1缺少大约100个API)。所有这些都是关于绑定策略、程序集标识以及在工具(MSBuild、ClickOnce、TestRunner等)中处理框架程序集的

这里学到的教训很简单:一旦发布,.NET实现的给定版本就不能改变.NET标准的支持级别。注意,受支持的.NET标准编号是一个不可变的属性。支持更高版本需要提供新版本


框架4.5只能参考标准1.0和1.1。为了参考标准2.0,您至少需要使用Framework 4.6.1。请参阅此以供参考。@BradleyUffner确定,尝试将其重建为4.6.2。没有变化…当你说你已经安装了所有东西时,我们不能问是否缺少安装。但也许它真的缺少安装?@baruch“安装”什么?@MasonWheeler“我正在设置的新开发系统”谢谢!将我的项目升级到框架4.7.2修复了它。我仍然希望知道是什么导致了这个问题,但至少现在我可以继续前进了。