.NET Core 2.0+Standard 2.0项目TFS构建NuGet还原失败求助
解决TFS构建时NuGet还原兼容.NET Core 2.0的问题
这个问题我之前帮人排查过好几次,核心原因是NuGet 4.0.0/4.1.0对.NET Core 2.0和.NET Standard 2.0的包兼容性支持不完善。本地VS2017能正常构建是因为VS自带的NuGet版本通常是4.3及以上,已经支持.NET Core 2.0引入的"兼容旧框架包"规则——简单说就是.NET Core 2.0项目可以通过.NET Standard 2.0的兼容层引用只支持.NET Framework 3.5的包,但NuGet 4.0/4.1还没跟上这个规则。
下面是几个可行的解决办法,按优先级排序:
1. 升级TFS构建服务器的NuGet版本到4.3.0及以上
这是最彻底的解决方案。NuGet 4.3.0及以后的版本完整支持.NET Core 2.0的包兼容性逻辑,能正确识别net35的包可以被netcoreapp2.0项目引用。你可以:
- 在TFS的构建任务中,指定使用NuGet 4.3.0+版本(如果是使用NuGet任务的话)
- 或者改用
DotNetCoreCLI任务执行restore命令,它会自动使用项目对应的.NET Core SDK自带的NuGet版本(.NET Core 2.0 SDK自带的NuGet版本就是4.3+)
2. 在项目文件中添加兼容配置(临时 workaround)
如果暂时无法升级NuGet版本,可以在你的.NET Core 2.0控制台项目的.csproj文件中添加以下配置,强制NuGet在还原时允许兼容net35的包:
<PropertyGroup> <!-- 确保使用PackageReference格式,这是.NET Core项目推荐的包引用方式 --> <RestoreProjectStyle>PackageReference</RestoreProjectStyle> <!-- 添加net35到兼容目标列表 --> <AssetTargetFallback>$(AssetTargetFallback);net35;</AssetTargetFallback> </PropertyGroup>
添加后重新提交代码,再触发TFS构建试试。
3. 检查并升级目标NuGet包
如果mypackagename有支持.NET Standard 2.0或.NET Core 2.0的更新版本,直接升级到对应版本是更长期的解决方案,避免依赖兼容层带来的潜在问题。
4. 确认TFS构建任务的配置
确保TFS构建中的还原步骤没有使用过时的配置:
- 避免使用旧版的"NuGet Installer"任务,改用"DotNetCoreCLI"任务的
restore命令 - 确认构建服务器上已经安装了.NET Core 2.0 SDK,且任务中指定了正确的SDK版本
内容的提问来源于stack exchange,提问作者to StackOverflow
相关产品推荐
相关产品推荐

