项目引用拉取错误框架版本致Jenkins构建失败
问题背景与现象
解决方案内的ProjectA配置了多目标框架:<TargetFrameworks>net48;net6.0</TargetFrameworks>。其他基于.NET 4.8的项目引用ProjectA后构建正常,但单元测试项目在Jenkins代理通过MSBuild构建时出现编译错误(本地VS2022构建完全正常):
程序集'ProjectA, Version=24.3.99.0, Culture=neutral, PublicKeyToken=null'使用的System.Xml.ReaderWriter版本6.0.0.0高于引用的4.1.1.0版本
程序集'ProjectA, Version=24.3.99.0, Culture=neutral, PublicKeyToken=null'使用的System.Runtime版本6.0.0.0高于引用的4.1.2.0版本
从错误信息判断,单元测试项目错误拉取了ProjectA的.NET 6版本而非匹配的.NET 4.8版本。将ProjectA改为仅构建net48时,单元测试项目可正常构建。
已尝试的无效操作
- 在单元测试项目的ProjectReference中显式指定目标框架,无效果:
<ItemGroup> <ProjectReference Include="..\..\src\ProjectA\ProjectA.csproj" > <SetTargetFramework>TargetFramework=net48</SetTargetFramework> </ProjectReference> </ItemGroup>
- 将单元测试项目分别切换为.NET 4.8和.NET 6进行构建,均出现相同的版本冲突错误。
附加异常信息
单元测试项目同时出现关联编译错误:
error CS0119: 'Extensions.Attributes(IEnumerable)' 是方法,在此上下文中无效
对应代码片段:
var value = node.Attributs["Key"];
注:node为XmlNode类型,Attributes是XmlAttributeCollection的属性,本地VS2022可正常编译,但MSBuild构建报错。
单元测试项目引用的NuGet包:Moq 4.18.4、NUnit 4.1.0、NUnit3TestAdapter 4.5.0、Should 1.1.20
最终解决方案
未找到.NET 4.8单元测试项目错误拉取ProjectA的.NET 6程序集的根本原因(同配置的其他解决方案无此问题),最终将单元测试项目迁移为.NET 6后,所有构建错误均消失。
内容的提问来源于stack exchange,提问作者dwilliss

