VSTS构建含Newtonsoft.Json的类库项目出现未知测试报错求助
解决VSTS构建中Newtonsoft.Json相关测试错误的方案
我明白你现在在VSTS(也就是现在的Azure DevOps)构建类库项目时遇到的Newtonsoft.Json相关问题有多头疼——尤其是那些莫名出现的测试错误和找不到的Newtonsoft.Json.Net20.sln文件引用,确实很让人困惑。结合你已经做的操作,我给你几个针对性的排查和解决步骤:
1. 锁定构建任务的目标解决方案,避免意外引用外部文件
- 打开你的VSTS构建定义,找到Visual Studio Build任务,检查“解决方案”字段的配置。如果用了通配符(比如
**/*.sln),很可能是代理在工作目录里找到了缓存的第三方解决方案文件(比如Newtonsoft.Json.Net20.sln)。建议把路径明确指定为你自己的三个类库项目对应的解决方案文件,比如$(Build.SourcesDirectory)/你的解决方案名.sln。 - 添加一个Delete Files任务放在构建任务之前,清理代理的工作目录,避免缓存干扰。设置要删除的路径为
$(Build.SourcesDirectory)/**和$(Build.BinariesDirectory)/**,确保每次构建都从干净的状态开始。
2. 清理项目中意外引入的Newtonsoft测试包依赖
- 逐个打开你的类库项目的
.csproj文件,搜索是否存在<PackageReference>或<Reference>节点引用了Newtonsoft.Json.Tests这类测试相关的包。如果有,直接删除这些节点——这类测试包本来就不该出现在生产类库项目里。 - 针对每个项目单独执行
Update-Package -reinstall -ProjectName 你的项目名称命令,确保每个项目的NuGet依赖都是完全重新安装的,没有残留的旧版本或错误引用。
3. 确认框架兼容性与绑定重定向配置
- 虽然你已经把项目升级到.NET Framework 4.6.1,但还是要确认每个项目的目标框架设置完全一致,并且你安装的Newtonsoft.Json版本支持4.6.1(通常10.0.1及以上版本都支持,可在NuGet包管理器里核对版本)。
- 检查项目的
app.config文件,添加或更新Newtonsoft.Json的绑定重定向配置,确保所有引用都指向同一个版本,避免版本冲突。示例配置如下(替换成你实际使用的版本号):
<configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-13.0.0.0" newVersion="13.0.0.0" /> </dependentAssembly> </assemblyBinding> </runtime> </configuration>
4. 清理代理的NuGet缓存
- 如果使用的是私有代理,登录代理机器,执行
nuget locals all -clear命令清理所有NuGet缓存,避免旧的或错误的包文件干扰构建。如果是托管代理,这个步骤可以跳过,但可以尝试重新运行构建,让代理重新拉取干净的包。
按照这些步骤逐一排查,应该能解决你遇到的测试错误和莫名的解决方案引用问题。
内容的提问来源于stack exchange,提问作者Rob
相关产品推荐
相关产品推荐

