NuGet 2.8.6是否导致依赖于.NET 4.5+?

5

最近在使用最新的nuget.exe(2.8.6)进行构建时,出现了错误。

.nuget\nuget restore MySolution.sln

Could not load type 'System.Runtime.CompilerServices.ExtensionAttribute' from assembly 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.

完全相同的命令/源代码树可以使用nuget.exe 2.8.5完美还原。
构建机器是Windows 2008 R2,.NET 4.0(此构建映像上不允许4.5更新)和VS 2010。基本上,我们有许多针对特定组合(Windows,.NET,Visual Studio)进行配置的构建机器。
似乎2.8.6版本依赖于.NET 4.5,在没有该软件的机器上无法正常运行。

那是一个相当臭名昭著的错误信息。它构建错误,只能在安装了4.5的机器上运行。所以现在你基本上只能使用旧版本。 - Hans Passant
1
感谢回复 - 令人震惊的是,“补丁”版本x.x.6居然是他们将目标更改为.NET 4.5的地方。:( - Sherlock
有人向NuGet团队报告过这个问题吗?从本质上讲,这是一种错误的链接方式,使其与.NET 4.0不兼容... - Philip Atz
未知的Philip,你知道在哪里/如何检查吗? - Sherlock
@JohnWatson 嗯,您可以将如何完成此操作的方法发布为答案更新。这可能会受到某些人的欢迎。至于我,我正在努力将我的Nuget版本回退到2.8.5。 - f470071
显示剩余6条评论
2个回答

2
我提出了这个问题,但据我所知,目前没有修复的计划:https://github.com/NuGet/Home/issues/1611 解决方法是使用可以在nuget.org上找到的NuGet.CommandLine 2.8.5包:
  1. 首先,在Package Manager Console中使用命令Install-Package NuGet.CommandLine -Version 2.8.5下载
  2. 然后从该包的安装文件夹中获取可执行文件(nuget.exe),并用它替换您当前使用的NuGet 2.8.6可执行文件(即在.nuget\文件夹中)。
  3. 您可能还想将新的可执行文件检入源代码控制。

谢谢。我错过了我的评论中的这个问题,否则我会发布的。昨天发布了nuGet 2.9,解决了这个.NET 40/45问题。但是谢谢你。你的命令行解决方法可能有效。 - f470071
这是 NuGet 命令行的链接:https://www.myget.org/F/nuget-volatile/api/v2/package/NuGet.CommandLine/2.9.0 - f470071

1
如果您使用TeamCity,有一种方法可以在不更改源代码的情况下解决此问题。前往TeamCity→管理→集成→NuGet,使用“获取NuGet”按钮获取2.8.5或3.3.0版本。如果您想要将其设置为默认值以供所有项目使用,请进行设置,或者设置NuGet还原步骤以使用此特定版本。

NuGet setup in TeamCity


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接