私には、気が狂いそうな奇妙な問題があります…
Cosmos DB 関連の機能のラッパー クラスを含むシンプルなクラス ライブラリ プロジェクト (Full .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 が発生しました HResult=0x80070002
メッセージ=ファイルまたはアセンブリ 'System.Net.Http、バージョン=4.2.0.0、カルチャ=ニュートラル、PublicKeyToken=b03f5f7f11d50a3a' またはその依存関係の 1 つを読み込めませんでした。指定されたファイルが見つかりません。
ソース= 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, Nullable
1 desiredConsistencyLevel)内部例外 1: FileNotFoundException: ファイルまたはアセンブリ 'System.Net.Http、バージョン = 4.0.0.0、カルチャ = ニュートラル、PublicKeyToken = b03f5f7f11d50a3a' またはその依存関係の 1 つを読み込めませんでした。指定されたファイルが見つかりません。
System.Net.Http アセンブリがまったく見つからない理由がまったくわかりません。クラス ライブラリ プロジェクトには、.Net Framework アセンブリ「System.Net.Http 4.0.0.0」へのアセンブリ参照さえあります。
また、4.2.0.0 への奇妙なバインディング リダイレクトがあることも理解できません。これはどこから来ているのでしょうか? これを回避するために、クラス ライブラリを使用している Service Fabric サービスの app.config に次のリダイレクトを追加してみました。
しかし、まだ違いはなく、実行時にエラーが発生します。
誰か手がかりを持っていますか? このような問題を見たことのある人はいますか?
ベストアンサー1
あなたが直面している問題は Visual Studio、特に同梱されている 2017 に関連していますSystem.Net.Http v4.2.0.0
。ただし、すべての参照を NuGet 経由で行う新しい方法を採用すると、最新バージョンのSystem.Net.Http
4.3.3 には dll バージョン 4.1.1.2 が含まれます。
問題は、VS がビルド時と実行時に参照を無視し、認識している DLL を参照しようとすることです。
修正方法:
System.Net.Httpへの参照はNuGet経由で行われるようにする
ビルド時のエラー:VS 2017 に同梱されている System.Net.Http.dll の拡張子を変更します (または別の場所に移動します...基本的には削除します) (
c:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Microsoft\Microsoft.NET.Build.Extensions\net461\lib\
)。別のバージョンを使用している場合は、パスが若干異なりますが、それほど大きくは変わりません。ランタイムエラー:アセンブリバインディングリダイレクトを追加する
Google でオンラインで検索すると、この件に関して Microsoft に未解決の問題がいくつか見つかります。将来的には修正されることを期待します。
アップデート:
ビルド エージェントでこの問題が機能するための恒久的な修正方法を探しているときに、新しい NuGet PackageReference モデル (ではなく.csproj
)に移行するとpackages.config
、より適切に機能する傾向があることに気付きました。このアップグレードを実行する方法に関するガイドへのリンクを次に示します。https://learn.microsoft.com/en-us/nuget/reference/migrate-packages-config-to-package-reference