我有一个奇怪的问题,这让我发疯...
我有一个简单的类库项目(完整的.NET Framework,4.6.1),其中包含围绕Cosmos DB的功能的包装类.因此,我已将"Microsoft.Azure.DocumentDB"NuGet Package 1.19.1添加到此项目中.除此之外,我引用了"Newtonsoft.Json"NuGet Package 10.0.3,以及一些"Microsoft.Diagnostics.EventFlow.*"NuGet包.
到目前为止,一切都编译没有任何错误.
但只要我点击我的包装类 - 从简单的Service Fabric无状态服务(完整的.NET Framework 4.6.1)中消耗 - 并尝试执行以下代码行:
_docClient = new DocumentClient(new Uri(cosmosDbEndpointUrl), cosmosDbAuthKey);
Run Code Online (Sandbox Code Playgroud)
我在运行时遇到这个奇怪的错误:
发生System.IO.FileNotFoundException HResult = 0x80070002
消息=无法加载文件或程序集'System.Net.Http,Version = 4.2.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'或其依赖项之一.该系统找不到指定的文件.
Source = StackTrace:at Microsoft.Azure.Documents.Client.DocumentClient.Initialize(Uri1 desiredConsistencyLevel) at Microsoft.Azure.Documents.Client.DocumentClient..ctor(Uri serviceEndpoint, String authKeyOrResourceToken, ConnectionPolicy connectionPolicy, NullableserviceEndpoint ,ConnectionPolicy connectionPolicy,Nullable 1 desiredConsistencyLevel)内部异常1:FileNotFoundException:无法加载文件或程序集'System.Net.Http,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'或其依赖项之一.该系统找不到指定的文件.
我完全没有线索,为什么根本找不到System.Net.Http程序集 - 我的类库项目中甚至有一个程序集引用到.Net Framework程序集"System.Net.Http 4.0.0.0".
我也不明白的是,有这种奇怪的绑定重定向到4.2.0.0 - 哪一个来自?为了解决这个问题,我尝试将以下重定向添加到Service Fabric Service的app.config(使用类库):
但仍然没有区别,我仍然在运行时得到错误.
有人知道吗?有人见过这样的问题吗?
谢谢和问候,OliverB
.net dotnet-httpclient visual-studio-2017 service-fabric-stateless
nuget包Microsoft.Net.Http.2.0.20710.0由于使用了System.Net.Http,版本= 2.0.0.0,它正在与另一个包中的版本4作斗争,因此导致我发生构建警告.
围绕这个最好的方法是什么?Microsoft.Net.Http.2.0.20710.0软件包是否已过时,我是否应该在我的项目中手动引用System.Net.Http,Version = 4.0.0.0?
构建输出是:
There was a conflict between "System.Net.Http, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" and "System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".
"System.Net.Http, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" was chosen because it was primary and "System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" was not.
References which depend on "System.Net.Http, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" [C:\Working\MyProject\packages\Microsoft.Net.Http.2.0.20710.0\lib\net40\System.Net.Http.dll].
C:\Working\MyProject\packages\Microsoft.Net.Http.2.0.20710.0\lib\net40\System.Net.Http.dll
Project file item includes which caused reference "C:\Working\MyProject\packages\Microsoft.Net.Http.2.0.20710.0\lib\net40\System.Net.Http.dll".
System.Net.Http, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
References which depend on "System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" [C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\System.Net.Http.dll].
C:\Working\MyProject\packages\Microsoft.AspNet.WebApi.Core.4.0.20710.0\lib\net40\System.Web.Http.dll
Project file item includes which caused reference …Run Code Online (Sandbox Code Playgroud) 我在Visual Studio 2013中有一个Web项目,包括几个库项目.
问题是向Web项目添加引用(即System.Collection,System.Net)作为"引用程序集"添加C:\Program Files (x86)\Reference Assemblies\Microsoft,当在IIS中加载时,它没有正确加载程序集的实现(来自GAC) .示例错误如下.
[BadImageFormatException: Cannot load a reference assembly for execution.]
[BadImageFormatException: Could not load file or assembly 'System.Collections' or one of its dependencies. Reference assemblies should not be loaded for execution. They can only be loaded in the Reflection-only loader context. (Exception from HRESULT: 0x80131058)]
System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) +0
System.Reflection.RuntimeAssembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, …Run Code Online (Sandbox Code Playgroud) 使用VS2017,我在一个空的解决方案中创建了一个ClassLibrary(.NET Framework 4.6.2).然后我在那里安装了System.Net.Http 4.3.2包,并HttpClient在Class1构造函数中使用了类.
然后我创建了一个ConsoleApp(.NET Framework 4.6.2),引用了ClassLibrary并Class1在Main方法中实例化.
现在运行ConsoleApp会导致运行时异常:
未处理的异常:System.IO.FileNotFoundException:无法加载文件或程序集'System.Net.Http,Version = 4.1.1.1,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'或其依赖项之一.该系统找不到指定的文件.在[...]中的ConsoleApp1.Program.Main(String [] args)的ClassLibrary1.Class1..ctor()中
在详细的构建日志中,我看到以下消息:
2>"System.Net.Http,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a"和"System.Net.Http,Version = 4.1.1.1,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a"之间存在冲突.
2>选择"System.Net.Http,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a",因为它是主要的,"System.Net.Http,Version = 4.1.1.1,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a " 不是.
假设我无法System.Net.Http从ConsoleApp中删除引用,因为我在实际项目结构中有这种情况.
Specific Version的参数System.Net.Http
引用并没有帮助.<bindingRedirect oldVersion="0.0.0.0-4.1.1.1"
newVersion="4.1.1.1" /> …"Microsoft.Bcl.Build.targets"包含此块:
<!--
Workaround MSBuild issue that prevents System.Runtime 2.5 and System.Threading.Tasks 2.5 from
satisfying indirect dependencies on System.Runtime 1.5 and System.Threading.Tasks 1.5 respectively.
-->
<AutoUnifyAssemblyReferences>false</AutoUnifyAssemblyReferences>
Run Code Online (Sandbox Code Playgroud)
实际上"AutoUnifyAssemblyReferences"有什么作用?