@AndreiU'nun zaten verdiği yanıta ve çalışma zamanı hatalarının yerel olarak nasıl yeniden üretileceğine bir ek.
Yerel olarak değil, Azure'a dağıtırken aşağıdaki çalışma zamanı hatasını aldım.
Dosya veya derleme 'System.Net.Http, Sürüm = 4.2.0.0, Culture = nötr, PublicKeyToken = b03f5f7f11d50a3a' veya bağımlılıklarından biri yüklenemedi. Sistem belirtilen dosyayı bulamıyor. "," ExceptionType ":" System.IO.FileNotFoundException "," StackTrace ":" Company.Project.Service.CompanyIntegrationApiService..ctor (Uri baseAddress) \ r \ n şirketinde Company.Project .BackOffice.Web.Controllers.OrderController..ctor (), C: \ projects \ company-project \ src \ Company.Project.BackOffice.Web \ Controllers \ Order \ OrderController.cs: lambda_method'da satır 30 \ r \ n Closure) \ r \ n System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create'de (HttpRequestMessage isteği, HttpControllerDescriptor controllerDescriptor, Type controllerType) "}} Kültür = nötr, PublicKeyToken = b03f5f7f11d50a3a 'veya bağımlılıklarından biri. Sistem belirtilen dosyayı bulamıyor. "," ExceptionType ":" System.IO.FileNotFoundException "," StackTrace ":" Company.Project.Service.CompanyIntegrationApiService..ctor (Uri baseAddress) \ r \ n şirketinde Company.Project .BackOffice.Web.Controllers.OrderController..ctor (), C: \ projects \ company-project \ src \ Company.Project.BackOffice.Web \ Controllers \ Order \ OrderController.cs: lambda_method'da satır 30 \ r \ n Closure) \ r \ n System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create'de (HttpRequestMessage isteği, HttpControllerDescriptor controllerDescriptor, Type controllerType) "}} Kültür = nötr, PublicKeyToken = b03f5f7f11d50a3a 'veya bağımlılıklarından biri. Sistem belirtilen dosyayı bulamıyor. "," ExceptionType ":" System.IO.FileNotFoundException "," StackTrace ":" Company.Project.Service.CompanyIntegrationApiService..ctor (Uri baseAddress) \ r \ n şirketinde Company.Project .BackOffice.Web.Controllers.OrderController..ctor (), C: \ projects \ company-project \ src \ Company.Project.BackOffice.Web \ Controllers \ Order \ OrderController.cs: lambda_method'da satır 30 \ r \ n Closure) \ r \ n System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create'de (HttpRequestMessage isteği, HttpControllerDescriptor controllerDescriptor, Type controllerType) "}}
Derlemelere bakmaya başladığımda, web projemin ve hizmet projemin farklı sürümleri hedeflediğini görebiliyordum System.Net.Http
.
Web projesi:
Hizmet projesi:
Bunun sürümlerdeki uyumsuzluktan kaynaklandığını düşünmek kolaydır, ancak buradaki anahtar hataya bakmaktır The system cannot find the file specified.
.
Yol özelliğine baktığımızda, hizmet Visual Studio 2017'den bir derlemeyi hedeflerken web projesinin bir .Net Framework derlemesini hedeflediğini görebiliriz. Sunucuda Visual Studio 2017 yüklü olmadığı için çalışma zamanı hatası oluşacaktır.
Web yolu:
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Net.Http.dll
Servis yolu:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Microsoft\Microsoft.NET.Build.Extensions\net461\lib\System.Net.Http.dll
Ayarlama gibi basit olarak bir şey Copy Local
için true
her durumda ancak değil, sorunu çözebilirsiniz.
Yerel makinenizde hatayı yeniden oluşturmak için gerekli System.Net.Http.dll
olanı Visual Studio'ya özgü klasörden kaldırmanız yeterlidir . Bu size çalışma zamanı hatası ve muhtemelen bazı yapı hataları verecektir. Bunlar düzeltildikten sonra her şey çalışmalı, en azından benim için oldu.
Eğer yüklediyseniz System.Net.Http
yoluyla NuGet
çek montaj bakarak kullanılan .csproj
sürümü. System.Net.Http 4.3.4
örneğin aşağıdaki montajı verir:
<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>
Jenkins, TeamCity veya AppVey gibi bir derleme sunucusu kullanıyorsanız veya çalışma zamanı eksik .dll
orada da olabilir. Bu durumda, System.Net.Http'nin NuGet sürümünü kullanmak veya eksikleri .dll
yerel olarak silmek işe yaramayabilir . Bu hatayı çözmek için, bulunmayan ve belirli olan sürüme bakın PublicKeyToken
. Bundan sonra, projenize bağlı olarak Web.config
veya App.config
projenize bağlı olarak bir bağlama yönlendirmesi oluşturun . Benim durumumda bunun yerine 4.0.0.0'ı kullanmak istiyorum:
<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>
Sorunla ilgili iyi bir Github dizisi:
https://github.com/dotnet/corefx/issues/22781