Tambahan untuk jawaban yang sudah diberikan @AndreiU dan cara mereproduksi kesalahan runtime secara lokal.
Saya mendapatkan kesalahan waktu proses di bawah ini saat menerapkan ke Azure, bukan secara lokal.
Tidak dapat memuat file atau assembly 'System.Net.Http, Version = 4.2.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a' atau salah satu dependensinya. Sistem tidak dapat menemukan file yang ditentukan. "," ExceptionType ":" System.IO.FileNotFoundException "," StackTrace ":" di Company.Project.Service.CompanyIntegrationApiService..ctor (Uri baseAddress) \ r \ n di Company.Project .BackOffice.Web.Controllers.OrderController..ctor () di C: \ projects \ company-project \ src \ Company.Project.BackOffice.Web \ Controllers \ Order \ OrderController.cs: baris 30 \ r \ n di lambda_method ( Tutup) \ r \ n di System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create (permintaan HttpRequestMessage, HttpControllerDescriptor controllerDescriptor, Ketik controllerType) "}} Budaya = netral, PublicKeyToken = b03f5f7f11d50a3a 'atau salah satu dependensinya. Sistem tidak dapat menemukan file yang ditentukan. "," ExceptionType ":" System.IO.FileNotFoundException "," StackTrace ":" di Company.Project.Service.CompanyIntegrationApiService..ctor (Uri baseAddress) \ r \ n di Company.Project .BackOffice.Web.Controllers.OrderController..ctor () di C: \ projects \ company-project \ src \ Company.Project.BackOffice.Web \ Controllers \ Order \ OrderController.cs: baris 30 \ r \ n di lambda_method ( Tutup) \ r \ n di System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create (permintaan HttpRequestMessage, HttpControllerDescriptor controllerDescriptor, Ketik controllerType) "}} Budaya = netral, PublicKeyToken = b03f5f7f11d50a3a 'atau salah satu dependensinya. Sistem tidak dapat menemukan file yang ditentukan. "," ExceptionType ":" System.IO.FileNotFoundException "," StackTrace ":" di Company.Project.Service.CompanyIntegrationApiService..ctor (Uri baseAddress) \ r \ n di Company.Project .BackOffice.Web.Controllers.OrderController..ctor () di C: \ projects \ company-project \ src \ Company.Project.BackOffice.Web \ Controllers \ Order \ OrderController.cs: baris 30 \ r \ n di lambda_method ( Tutup) \ r \ n di System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create (permintaan HttpRequestMessage, HttpControllerDescriptor controllerDescriptor, Ketik controllerType) "}}
Ketika saya mulai melihat rakitan, saya dapat melihat bahwa proyek web dan proyek layanan saya menargetkan versi yang berbeda System.Net.Http
.
Proyek web:
Proyek layanan:
Sangat mudah untuk berpikir bahwa ini disebabkan oleh ketidakcocokan dalam versi tetapi kuncinya di sini adalah melihat kesalahannya The system cannot find the file specified.
.
Melihat properti jalur kita dapat melihat bahwa proyek web menargetkan perakitan .Net Framework sementara layanan menargetkan perakitan dari Visual Studio 2017. Karena server tidak menginstal Visual Studio 2017, galat runtime akan terjadi.
Jalur web:
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Net.Http.dll
Jalur layanan:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Microsoft\Microsoft.NET.Build.Extensions\net461\lib\System.Net.Http.dll
Sesuatu yang sederhana seperti pengaturan Copy Local
untuk true
dapat memperbaiki masalah, namun tidak dalam semua kasus.
Untuk mereproduksi kesalahan di komputer lokal Anda, cukup hapus yang diperlukan System.Net.Http.dll
dari folder khusus Visual Studio. Ini akan memberi Anda error runtime dan mungkin beberapa error build. Setelah ini diperbaiki semuanya harus berfungsi, setidaknya itu untuk saya.
Jika Anda telah menginstal System.Net.Http
melalui NuGet
periksa perakitan mana yang digunakan dengan melihat .csproj
versi. System.Net.Http 4.3.4
memberikan perakitan berikut misalnya:
<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>
<Private>True</Private>
</Reference>
Jika Anda menggunakan server build seperti Jenkins, TeamCity, atau AppVeyor, runtime yang hilang .dll
mungkin juga ada di sana. Dalam hal ini mungkin tidak membantu untuk menggunakan versi NuGet dari System.Net.Http atau menghapus yang hilang .dll
secara lokal. Untuk mengatasi kesalahan ini, lihat versi yang tidak ditemukan dan spesifik PublicKeyToken
. Setelah itu buat pengalihan binding di salah satu Web.config
atau App.config
bergantung pada project Anda. Dalam kasus saya, saya ingin menggunakan 4.0.0.0 sebagai gantinya:
<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>
Utas Github yang bagus tentang masalah ini:
https://github.com/dotnet/corefx/issues/22781