System.Net.Http 4.2.0.0未找到的奇怪问题

167

我有一个奇怪的问题,让我感到很疯狂...

我有一个简单的类库项目(完整的.NET框架,4.6.1),其中包含围绕Cosmos DB的功能的包装器类。因此,我将“Microsoft.Azure.DocumentDB” NuGet包1.19.1添加到了这个项目中。除此之外,我还引用了“Newtonsoft.Json” NuGet包10.0.3,以及一些“Microsoft.Diagnostics.EventFlow.*” NuGet包。

到目前为止,一切都可以编译而没有任何错误。

但是,一旦我使用一个简单的Service Fabric无状态服务(完整的.NET Framework 4.6.1)调用我的包装器类,并尝试执行以下代码行:

_docClient = new DocumentClient(new Uri(cosmosDbEndpointUrl), cosmosDbAuthKey);

我在运行时遇到了这个奇怪的错误:

System.IO.FileNotFoundException 异常 HResult=0x80070002
Message=无法加载文件或程序集“System.Net.Http, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”或它的某一个依赖项。系统 找不到指定的文件。
Source= StackTrace: at Microsoft.Azure.Documents.Client.DocumentClient.Initialize(Uri serviceEndpoint, ConnectionPolicy connectionPolicy, Nullable1 desiredConsistencyLevel) at Microsoft.Azure.Documents.Client.DocumentClient..ctor(Uri serviceEndpoint, String authKeyOrResourceToken, ConnectionPolicy connectionPolicy, Nullable1 desiredConsistencyLevel)

Inner Exception 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 服务的 app.config 中添加以下重定向:

但是仍然没有任何改变,我仍然在运行时遇到了这个错误。

有人知道原因吗?有人碰到过类似的问题吗?


我回答了这个问题:https://dev59.com/Fanka4cB1Zd3GeqPP45o#63031440 - Mahdi
如果前 5 个答案不适用于您,请参见我的答案,了解如何将程序集添加到 web.config 的编译部分。 - CrnaStena
使用VS时,有很多地方需要注意,比如GAC、Temp文件夹、packages文件夹以及隐藏的.AppData文件夹等等。希望微软能像node一样将VS的包都放在node_modules文件夹中,这样所有的文件都可以集中管理。遇到问题时,只需删除该文件夹,运行npm install命令,搞定 - Jeb50
26个回答

0

作为一种解决方法,我安装了System.Buffer 4.5.0版本,它依赖于System.Net.Http dll版本4.2.0.0。因此,在安装后,您将在项目的bin文件夹中看到具有上述版本的System.Net.Http dll。这是解决此类问题的简单方法。


1
没有名为System.Buffer的包。同时,System.Buffers没有依赖项。你在说什么? - SandRock

0
在我的情况下,我在运行时遇到了“System.Net.Http 4.2.0.0未找到”的错误,但只在我的Web服务器上出现。后来发现只安装了.NET平台版本4.5。将Web服务器升级到.NET平台4.8解决了这个问题。

0

昨晚我们的应用程序停止向第三方提供商上传数据。 我目前正在使用VS 2017 15.9.27,我的错误“进程失败:底层连接已关闭:发送时发生意外错误。”来自这一行:

Dim stream As IO.Stream = request.GetRequestStream

由此发起的请求:

Dim request As Net.HttpWebRequest = Net.HttpWebRequest.Create(uri)

我做了两件事来解决这个问题。我升级到了最新版本的.NET 4.6.1,但现在出现了以下错误:
"Could not load file or assembly 'System.Net.Http, Version=4.2.0.0," 

为了解决新创建的问题,我删除了“System.Net.Http”包,然后通过NuGet将其添加回到4.3.4版本。
我怀疑这可能是证书或协议问题,因为它安装了以下以前不存在的安全引用:
System.Security.Cryptography.Algorithms (>= 4.3.0)
System.Security.Cryptography.Encoding (>= 4.3.0) 
System.Security.Cryptography.Primitives (>= 4.3.0)
System.Security.Cryptography.X509Certificates (>= 4.3.0)

0

对我来说,这是一件非常奇怪的事情。在找到问题所在后,需要花费数小时进行调试。它并没有在本地发生,只有在使用Jenkins构建项目时才会出现。

我有一个使用netstandard 2.0的小型库,而主要项目是基于普通.NET(我的是特定的v4.6.1)的WCF项目。但是,在netstandard库的启动类中,我有一些看起来像这样的代码:

public static class CoreModule
{
    public static IServiceCollection AddStaticDataConfiguration(
        this IServiceCollection services, Func<IServiceProvider, IStaticDataConfiguration>  staticDataConfiguration) 
    {  
        services.TryAddSingleton(staticDataConfiguration);
        services.TryAddSingleton<Func<HttpClient>>(x =>
        {
            var configuration = staticDataConfiguration(x);

            return configuration.ClientResolver ?? (() => new HttpClient());
        });
        return services;
    }
}

IStaticDataConfiguration接口如下所示:

public interface IStaticDataConfiguration
{
    //..... some stuff

    Func<HttpClient> ClientResolver { get; set; }
}  

这个接口位于 netstandard 库内部,而其实现位于库外(即 WCF 项目中)。

从库外部,我像下面这样调用了 AddStaticDataConfiguration 方法:

serviceCollection.AddStaticDataConfiguration(p =>
{
    var staticDataConfig = p.GetService<IStaticDataConfiguration>();
    return new StaticDataProviderConfiguration
    {
        //...some other stuff
        ClientResolver = () => restRequestFactory.GetInstrumentedClient("StaticDataService") //this returns an HttpClient
    };
});

问题在于我正在从一个普通的.NET项目传递一个Func<HttpClient>到一个netstandard库中,由于某些疯狂的原因,netstandard不喜欢它,也许它认为HttpClient来自不同的类,结果抛出System.Net.Http 4.x.x.x未找到异常。当我删除了代码,不再接受来自普通.NET项目的HttpClient,而是在库内部创建一个新的func时,它就很开心并且正常工作。 希望这可以帮助其他人,因为这个错误发生的原因有很多 :)

0
经过几天的努力,我终于解决了我的项目中 .Net 4.7.2/System.Net.Http 的问题。除了更改 *.csproj 文件以针对框架版本 4.7.2 进行目标设置外,我还必须更新项目中的 app.config。
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />

to:

<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />

-3

首先从您的本地文件系统中删除:

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\Microsoft\Microsoft.NET.Build.Extensions\net461\lib\Syste.Net.Http.dll

然后在项目中删除所有引用,并添加 4.0 引用。
这解决了我的问题。


5
不要删除你的VS安装文件以防破坏。 - David Burg
多好的想法啊。我真不知道为什么我没想到这个。 :) - Alexandru Dicu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接