将项目转为.NET Standard2.0后TFS2017 NuGet打包报错,求最优替代方案
最优替代方案:改用NuGet Command Line任务打包
你碰到的这个问题很典型——TFS 2017自带的NuGet Packager步骤是针对旧格式csproj设计的,完全不支持.NET Standard项目用的SDK-style格式。最靠谱的解决办法就是替换成NuGet Command Line任务,具体操作如下:
1. 先移除旧的NuGet Packager步骤
打开你的TFS构建定义,找到那个报错的NuGet Packager步骤,直接删除即可。
2. 添加NuGet Command Line任务并配置
在构建任务列表里新增一个NuGet Command Line任务,按照下面的方式配置:
- Command:选择
pack(要是看不到这个选项,别急,后面有解决办法) - Path to csproj or nuspec file(s) to pack:填写你的项目文件路径,比如用
**/*.csproj匹配所有项目,或者直接指定单个项目的具体路径 - Configuration to package:选择你要打包的配置,比如Release
- Output directory:设置成和原来Packager步骤一致的输出目录,保证后续流程无需调整
3. 解决「找不到pack命令」的问题
如果Command下拉菜单里没看到pack选项,那肯定是TFS默认使用的NuGet版本太低了——pack命令从NuGet 3.5版本才开始支持,TFS2017自带的版本可能达不到要求。你可以这么处理:
- 在NuGet Command Line任务里找到NuGet version选项
- 选择「Install specific version of NuGet」,然后输入一个3.5以上的版本号,推荐使用
4.9.4(这个版本对.NET Standard的支持很稳定) - 保存配置后重新运行构建,就能看到pack选项了
额外小技巧
其实SDK-style项目本身就支持用MSBuild直接打包,你也可以不用NuGet命令行,直接添加一个MSBuild任务,参数填写/t:pack /p:Configuration=Release,这样也能生成NuGet包,还不用额外依赖NuGet工具,也是个不错的选择。另外记得检查你的csproj文件里有没有配置好NuGet元数据(比如<PackageId>、<Version>、<Authors>这些),不然打包出来的包信息会不全哦。
内容的提问来源于stack exchange,提问作者Yahya Hussein
相关产品推荐
相关产品推荐

