【问题标题】:Newer versions of NuGet.exe can't resolve framework match when restoring older packages (net40, netframework40)还原旧包(net40、netframework40)时,较新版本的 NuGet.exe 无法解析框架匹配
【发布时间】:2020-07-17 21:57:46
【问题描述】:

在这上面花了两天的大部分时间,是时候寻求一些帮助了。

我正在修改我们的 CI 构建,并且有一个 .net 4.6.1 上的 VS2017 解决方案,使用 packages.config 样式的 nuget refs,TeamCity 使用 NuGet runner v3.4.4 来恢复包。它最初可能使用 VS2008 或 10 构建,然后在 2018 年转换为 2017。有人检查了 packages 目录,多年来一直如此。

是时候让它达到更现代的标准了。我将项目转换为使用 packageReference,现在正在使用 msbuild 和 restore;build 目标来恢复我的包并构建解决方案。效果很好,除了这个包。

即使在 VisualStudio 2017 15.8.7 中,构建(当然会进行恢复)也无法使用 packageReference 恢复 smtp-impostor 包,并出现以下错误:

NU1202: Package smtp-impostor 2.0.8 is not compatible with net461 (.NETFramework,Version=v4.0). Package smtp-impostor 2.0.8 supports: netframework40 (.NetFramework 4.0,Version=v0.0)

在搜索“netframework40”时,我无法让 Google 找到一条有用的帖子。

如果我使用 nuget3.4.4 CLI,它工作正常(它似乎调用 msbuild 4.0)。如果我使用 nuget 5.6 CLI,我会收到错误消息;它使用的是 Visual Studio 2017 附带的 msbuild。

我看到很多关于如何让 nuget 使用不同版本的 msbuild 的帖子,但我没有看到如何告诉 msbuild 使用早期版本的 nuget!

我试过了:

  1. 将解决方案重新定位到 v4.0 - 发生同样的错误 - 错误的第一部分只是更改为 net40
  2. 将 csproj 文件标签中的 ToolsVersion 设置为 14.0
  3. 将 csproj 文件中的 PlatformToolsVersion 属性设置为 14.0。

没有骰子。

我真的不想为这个项目保留 packages.config(以及额外的 CI 构建步骤),也不想将包的单个 DLL 签入到我的 repo 中。它看起来更像是我将不得不放弃 packageReference 升级并坚持使用旧式 nuget runner 包恢复。

有人见过这个吗? “netframework40”来自哪里的任何想法以及为什么较新的 nuget 无法与 net40 匹配?

提前感谢您!

【问题讨论】:

标签: msbuild visual-studio-2017 nuget nuget-package-restore packagereference


【解决方案1】:

较新版本的 NuGet.exe 在以下情况下无法解析框架匹配 恢复旧包(net40、network40)

问题是这个nuget包smtp-impostor 2.0.8与新的PackageReference format不兼容,与NugetV3.4.4或NugetV5.6.x无关。

其实这个包是2011年发布的,从VS2017开始就使用了新的包管理格式PackageReference。

此外,作者没有对包进行任何更改以适应新的包引用。我也面临同样的问题。

建议

作为一种解决方法,您必须使用 packages.config 而不是 PackageReference 来安装此 nuget 包。

自 VS2017 起,VS 添加了新的 PackageReference nuget 管理格式,而对于您的旧 VS2008,它使用 Packages.config。

或者你可以包含nuget包的作者来改变它。

【讨论】:

  • 谢谢,@perry ...我相信你是对的。 .NET Framework 4.0 不是 Nuget 期望看到 Target Frameworks 的已记录目标框架名字对象 (TFM) 之一,这就是它失败的原因。并感谢您联系作者的想法;没想到!
猜你喜欢
  • 2022-12-21
  • 2020-12-31
  • 2019-04-10
  • 1970-01-01
  • 2011-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-08
相关资源
最近更新 更多