我正在将Net Framework 4 dll移植到Net Core.当移植我的单元测试项目时,我得到一个运行一些特定测试的异常(不是全部).
System.IO.FileLoadException:无法加载文件或程序集'System.Net.Http,Version = 4.1.1.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'或其依赖项之一.定位的程序集的清单定义与程序集引用不匹配.(HRESULT异常:0x80131040)
这是我的dll的project.json
{
"version": "1.0.0-*",
"dependencies": {
"log4net": "2.0.7",
"NETStandard.Library": "1.6.1",
"Newtonsoft.Json": "9.0.1",
"StackExchange.Redis": "1.2.1"
},
"frameworks": {
"netstandard1.6": {
"imports": "dnxcore50"
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是单元测试项目的Packages.config
<packages>
<package id="Castle.Core" version="4.0.0" targetFramework="net462" />
<package id="log4net" version="2.0.7" targetFramework="net462" />
<package id="Microsoft.Win32.Primitives" version="4.0.1" targetFramework="net462" />
<package id="Moq" version="4.7.1" targetFramework="net462" />
<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net462" />
<package id="StackExchange.Redis" version="1.2.1" targetFramework="net462" />
<package id="System.Diagnostics.DiagnosticSource" version="4.0.0" targetFramework="net462" />
<package id="System.IO" version="4.1.0" targetFramework="net462" />
<package id="System.IO.FileSystem" …Run Code Online (Sandbox Code Playgroud) 我的VS解决方案中有几个项目.每当我将"System.Net.Http"NuGet包添加到它显示为4.2.0.0版本的包时.然后我也这样做并添加相同的NuGet包,然而,另一个说版本.4.1.1.2
然后我收到警告:
发现System.Net.Http之间存在冲突
EDIT1:
Gathering dependency information took 1.7 sec
Attempting to resolve dependencies for package 'System.Net.Http.4.3.3' with DependencyBehavior 'Lowest'
Resolving dependency information took 0 ms
Resolving actions to install package 'System.Net.Http.4.3.3'
Resolved actions to install package 'System.Net.Http.4.3.3'
Retrieving package 'System.Net.Http 4.3.3' from 'nuget.org'.
Adding package 'System.Net.Http.4.3.3' to folder 'C:\...Service\packages'
Added package 'System.Net.Http.4.3.3' to folder 'C:\...Service\packages'
Added package 'System.Net.Http.4.3.3' to 'packages.config'
Successfully installed 'System.Net.Http 4.3.3' to ....Service
Executing nuget actions took 2.05 sec
Time Elapsed: 00:00:03.8937113
Run Code Online (Sandbox Code Playgroud)
请注意安装了正确的版本,但是=> Props =>版本说4.1.1.2
发现无法解析的同一依赖程序集的不同版本之间的冲突.当日志详细程度设置为详细时,这些引用冲突将在构建日志中列出.
这是在我将Newtonsoft.Json导入App.Core(Portable)项目之后发生的.
看看输出后:
"Microsoft.CSharp,Version = 2.0.5.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a"和"Microsoft.CSharp,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a"之间存在冲突.(TaskId:90)2>选择"Microsoft.CSharp,Version = 2.0.5.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a",因为它是主要的,并且"Microsoft.CSharp,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a"不是.(TASKID:90)
我现在需要做什么?
我在清单中存在的dll版本和build文件夹中存在的实际版本时遇到了一些问题.将构建选项更改为详细信息提供了以下信息:
"Microsoft.Practices.EnterpriseLibrary.Common,Version = 5.0.505.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35"和"Microsoft.Practices.EnterpriseLibrary.Common,Version = 6.0.0.0,Culture = neutral,PublicKeyToken =之间存在冲突31bf3856ad364e35" .
之所以选择"Microsoft.Practices.EnterpriseLibrary.Common,Version = 5.0.505.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35"是因为它是主要的,并且"Microsoft.Practices.EnterpriseLibrary.Common,Version = 6.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35"不是.
在第二部分中,它说选择了特定版本,因为它是主要版本.
小学的意义是什么?
问候.
也许相关信息:我有一个我用.net 4.5构建的Web应用程序.我想部署到Azure的网站,但它只支持.net 4.0,所以我将项目降级为.net 4.0.它在本地运行时仍然有效.
当我发布到Azure时,我收到此错误:
无法加载文件或程序集"System.Net.Http"或其依赖项之一.定位的程序集的清单定义与程序集引用不匹配.(HRESULT异常:0x80131040)
我尝试用nuget删除Web API并读取它,正如SO建议的另一个问题,但我仍然有同样的问题.
我试过关闭/打开VS,并清理/构建.