在这上面花了两天的大部分时间之后,是时候寻求一些帮助了。
我正在修改我们的 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)
在搜索“network40”时,我无法让 Google 找到一个有用的帖子。
如果我使用 nuget3.4.4 CLI,它工作正常(它似乎调用 msbuild 4.0)。如果我使用 nuget 5.6 CLI,我会收到错误消息;它使用 Visual Studio 2017 附带的 msbuild。
我看到很多关于如何让 nuget 使用不同版本的 msbuild 的帖子,但我看不到如何告诉 msbuild 使用早期版本的 nuget!
我试过了:
- 将解决方案重新定位到 v4.0 - 发生同样的错误 - 错误的第一部分只是更改为 net40
- 将 csproj 文件标签中的 ToolsVersion 设置为 14.0
- 将 csproj 文件中的 PlatformToolsVersion 属性设置为 14.0。
没有骰子。
我真的不想为这个项目保留 packages.config(以及额外的 CI 构建步骤),也不想将包的单个 DLL 签入到我的 repo 中。它看起来更像是我将不得不放弃 packageReference 升级并坚持使用旧式 nuget runner 包恢复。
有人见过这个吗?“netframework40”来自哪里的任何想法以及为什么较新的nuget无法与net40匹配?
先感谢您!