@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
を見てどのアセンブリが使用されているかを確認してください。たとえば、次のアセンブリを提供します。.csproj
System.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