.NET Framework 4.8项目在Mono下System.Net.Http版本冲突求助
我在Mono环境下编译.NET Framework 4.8解决方案时,卡在了Web API测试项目的编译阶段,出现近100次以下错误:
MyControllerTests.cs.cs(50, 26): [CS1705] 程序集“My.Api”(标识为“My.Api, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”)使用的“System.Net.Http, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”版本高于引用的程序集“System.Net.Http”(标识为“System.Net.Http, Version=4.1.1.3, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”)
背景信息
解决方案内项目类型混杂:大部分底层项目为SDK风格,采用PackageReference管理依赖;但Web和API项目不支持该方式。测试项目依赖netstandard2.0。
最初Web API项目也存在同类错误,我通过添加以下引用解决:
<Reference Include="System.Net.Http"/>
但测试项目随即出现大量上述版本冲突错误。
已尝试的解决方法
- 为测试项目显式添加引用,但Web API项目从Mono GAC获取4.2.0.0版本,测试项目仍从NuGet包目录加载4.1.1.3版本,问题未解决。
- 为API项目的引用添加完整版本信息,无效果:
<Reference Include="System.Net.Http, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
- 反向操作,在Web API项目中显式引用4.1.1.3版本,项目再次出错:
<Reference Include="System.Net.Http, Version=4.1.1.3, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"> <HintPath>..\..\packages\System.Net.Http.4.3.4\lib\net46\System.Net.Http.dll</HintPath> <Private>True</Private> </Reference>
- 尝试绑定重定向,但因尚未进入代码执行阶段,完全无效。
更新:新的错误情况
为测试项目添加指定版本的引用后:
<Reference Include="System.Net.Http, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
编译错误变为类型重复定义:
ContextUtil.cs(12, 175): [CS0433] 类型“HttpRequestMessage”同时存在于“System.Net.Http, Version=4.1.1.3, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”和“System.Net.Http, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”中
目前解决方案树的程序集部分显示两个不同版本的System.Net.Http,即使添加了明确的直接引用,项目仍无法确定使用哪个版本。
请问还有什么方法可以尝试解决这个问题?
内容的提问来源于stack exchange,提问作者Keith Jackson

