Mas*_*ler 3 .net msbuild dependency-management .net-standard
我有一个针对 .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 Standard 2.0 支持改装到 net461–net471 的工具链存在大量问题,.NET 团队一直强烈建议迁移到net472。如果升级是您的选择,它将节省大量时间。.NET Framework 4.7.2 还具有不需要在 bin 输出中存在数十个 shim DLL的附带好处,当然,任何 .NET Framework 升级都会带来一些小改进。(发行说明:net47、net471、net472。)
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 编号是一个不可变的属性。支持更高版本需要发布新版本。
| 归档时间: |
|
| 查看次数: |
1070 次 |
| 最近记录: |