让.NET Framework项目引用.NET标准程序集需要什么?

问题描述 投票:1回答:1

我有一个针对.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语言,所以这些问题都没有特别相关,而且之前它的确运作得很好。

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

.net msbuild dependency-management .net-standard
1个回答
3
投票

.NET团队强烈建议转向net472,因为plethora of issues工具链试图将.NET Standard 2.0支持改进net461-net471。如果升级是您的选择,它将节省大量时间。 .NET Framework 4.7.2的另一个好处是不需要在bin输出中使用dozens of shim DLLs,当然还有.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标准号是一个不可变的属性。支持更高版本需要发布新版本。

© www.soinside.com 2019 - 2024. All rights reserved.