139

私は奇妙な問題を抱えており、気が狂ってしまいます…</p>

Cosmos DB に関する機能のラッパー クラスを含む単純なクラス ライブラリ プロジェクト (完全な .NET Framework、4.6.1) があります。したがって、「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 が発生しまし
た。システムは、指定されたファイルを見つけることができません。
ソース = StackTrace: Microsoft.Azure.Documents.Client.DocumentClient.Initialize (Uri serviceEndpoint、ConnectionPolicy connectionPolicy、Nullable 1 desiredConsistencyLevel) at Microsoft.Azure.Documents.Client.DocumentClient..ctor(Uri serviceEndpoint, String authKeyOrResourceToken, ConnectionPolicy connectionPolicy, Nullable1 desiredConsistencyLevel)で

内部例外 1: FileNotFoundException: ファイルまたはアセンブリ 'System.Net.Http、Version=4.0.0.0、Culture=neutral、PublicKeyToken=b03f5f7f11d50a3a' またはその依存関係の 1 つを読み込めませんでした。システムは、指定されたファイルを見つけることができません。

System.Net.Http アセンブリがまったく見つからない理由はまったくわかりません。私のクラス ライブラリ プロジェクトには、.Net Framework アセンブリ「System.Net.Http 4.0.0.0」へのアセンブリ参照さえあります。

私が理解していないのは、4.2.0.0 へのこの奇妙なバインディング リダイレクトがあるということです。それはどこから来ているのですか? これを回避するために、(クラス ライブラリを使用している) Service Fabric Service の app.config に次のリダイレクトを追加しようとしました。

それでも違いはありません。実行時にエラーが発生します。

手がかりを持っている人はいますか?そのような問題を見た人はいますか?

4

22 に答える 22

115

バインディングリダイレクトの削除はうまくいきました。削除してみてください:

<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
于 2017-11-30T15:41:32.443 に答える
21

@AndreiU が既に提供した回答への追加と、実行時エラーをローカルで再現する方法。

ローカルではなく Azure にデプロイするときに、以下のランタイム エラーが発生しました。

ファイルまたはアセンブリ 'System.Net.Http、Version=4.2.0.0、Culture=neutral、PublicKeyToken=b03f5f7f11d50a3a' またはその依存関係の 1 つを読み込めませんでした。The system cannot find the file specified.","ExceptionType":"System.IO.FileNotFoundException","StackTrace":" at Company.Project.Service.CompanyIntegrationApiService..ctor(Uri baseAddress)\r\n at Company.Project .BackOffice.Web.Controllers.OrderController..ctor() in C:\projects\company-project\src\Company.Project.BackOffice.Web\Controllers\Order\OrderController.cs:line 30\r\n at lambda_method(閉鎖 )\r\n で System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage リクエスト、HttpControllerDescriptor controllerDescriptor、タイプ controllerType)"}} またはその依存関係の 1 つ。The system cannot find the file specified.","ExceptionType":"System.IO.FileNotFoundException","StackTrace":" at Company.Project.Service.CompanyIntegrationApiService..ctor(Uri baseAddress)\r\n at Company.Project .BackOffice.Web.Controllers.OrderController..ctor() in C:\projects\company-project\src\Company.Project.BackOffice.Web\Controllers\Order\OrderController.cs:line 30\r\n at lambda_method(閉鎖 )\r\n で System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage リクエスト、HttpControllerDescriptor controllerDescriptor、タイプ controllerType)"}} またはその依存関係の 1 つ。The system cannot find the file specified.","ExceptionType":"System.IO.FileNotFoundException","StackTrace":" at Company.Project.Service.CompanyIntegrationApiService..ctor(Uri baseAddress)\r\n at Company.Project .BackOffice.Web.Controllers.OrderController..ctor() in C:\projects\company-project\src\Company.Project.BackOffice.Web\Controllers\Order\OrderController.cs:line 30\r\n at lambda_method(閉鎖 )\r\n で System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage リクエスト、HttpControllerDescriptor controllerDescriptor、タイプ controllerType)"}}

アセンブリを調べ始めると、Web プロジェクトとサービス プロジェクトが .NET の異なるバージョンを対象としていることがわかりましたSystem.Net.Http

Web プロジェクト:

ここに画像の説明を入力

サービス プロジェクト:

ここに画像の説明を入力

これはバージョンの不一致が原因だと考えるのは簡単ですが、ここで重要なのはエラーを確認することThe system cannot find the file specified.です。

パス プロパティを見ると、Web プロジェクトが .Net Framework アセンブリをターゲットにしているのに対し、サービスは Visual Studio 2017 のアセンブリをターゲットにしていることがわかります。サーバーには Visual Studio 2017 がインストールされていないため、ランタイム エラーが発生します。

ウェブパス:

C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Net.Http.dll

サービス パス:

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

に設定Copy Localするtrueだけで問題を解決できますが、すべての場合ではありません。

ここに画像の説明を入力

System.Net.Http.dllローカル マシンでエラーを再現するには、Visual Studio 固有のフォルダーから必要なものを削除するだけです。これにより、実行時エラーが発生し、おそらくいくつかのビルド エラーが発生します。これらが修正された後、すべてが機能するはずです。少なくとも私にとってはそうでした。

System.Net.Http経由でインストールした場合は、バージョンNuGetを見てどのアセンブリが使用されているかを確認してください。たとえば、次のアセンブリを提供します。.csprojSystem.Net.Http 4.3.4

<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>

Jenkins、TeamCity、AppVeyor などのビルド サーバーを使用している場合、欠落しているランタイム.dllもそこに存在する可能性があります。この場合、NuGet バージョンの System.Net.Http を使用したり、不足しているファイルを.dllローカルで削除したりすることは役に立たない可能性があります。このエラーを解決するには、見つからないバージョンと特定のPublicKeyToken. その後、Web.configまたはApp.configプロジェクトに応じてバインディング リダイレクトを作成します。私の場合、代わりに 4.0.0.0 を使用したいと思います。

<dependentAssembly>
  <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
  <bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.0.0.0" />
</dependentAssembly>

この問題に関する良い Github スレッド:

https://github.com/dotnet/corefx/issues/22781

于 2018-11-05T22:29:43.973 に答える
2

サーバーの 1 つに Web サービスをデプロイしたときに、このエラーが発生しました。このプロジェクトは、サーバーにインストールされていない .Net Framework 4.7.2 を対象としていました。サーバーに 4.7.2 フレームワークをインストールすると、問題が修正されました。

于 2018-12-10T12:53:11.103 に答える
0

一晩で、アプリケーションがサードパーティ プロバイダーへのデータのアップロードを停止しました。現在、VS 2017 15.9.27 を使用しており、「プロセスが失敗しました: 基になる接続が閉じられました: 送信時に予期しないエラーが発生しました」というエラーが表示されます。この行からでした:

Dim stream As IO.Stream = request.GetRequestStream

これから始まるリクエストで:

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

問題を解決するために 2 つのことを行いました。.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)
于 2020-09-25T01:12:54.727 に答える
0

私は.net 4を使用していました.そして、私の「System.Net.Http」参照は「.net 4.7」バージョンのdllを指していました。そこで、.dll パスを 'Microsoft.Net.Http' パッケージを指すように変更し、再構築しました。これで私の問題は解決しました。

ここに画像の説明を入力

于 2021-03-25T16:38:45.857 に答える