Một bổ sung cho câu trả lời mà @AndreiU đã đưa ra và cách tạo cục bộ các lỗi thời gian chạy.
Tôi gặp lỗi thời gian chạy bên dưới khi triển khai tới Azure, không phải cục bộ.
Không thể tải tệp hoặc lắp ráp 'System.Net.Http, Phiên bản = 4.2.0.0, Văn hóa = trung lập, PublicKeyToken = b03f5f7f11d50a3a' hoặc một trong các phụ thuộc của nó. Hệ thống không thể tìm thấy tệp được chỉ định. "," ExceptionType ":" System.IO.FileNotFoundException "," StackTrace ":" tại Company.Project.Service.CompanyIntegrationApiService..ctor (Uri baseAddress) \ r \ n tại Company.Project .BackOffice.Web.Controllers.OrderController..ctor () trong C: \ project \ company-project \ src \ Company.Project.BackOffice.Web \ Controllers \ Order \ OrderController.cs: dòng 30 \ r \ n tại lambda_method ( Đóng cửa) \ r \ n tại System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create (yêu cầu HttpRequestMessage, HttpControllerDescriptor controllerDescriptor, Type controllerType) "}} Văn hóa = trung lập, PublicKeyToken = b03f5f7f11d50a3a 'hoặc một trong các phụ thuộc của nó. Hệ thống không thể tìm thấy tệp được chỉ định. "," ExceptionType ":" System.IO.FileNotFoundException "," StackTrace ":" tại Company.Project.Service.CompanyIntegrationApiService..ctor (Uri baseAddress) \ r \ n tại Company.Project .BackOffice.Web.Controllers.OrderController..ctor () trong C: \ project \ company-project \ src \ Company.Project.BackOffice.Web \ Controllers \ Order \ OrderController.cs: dòng 30 \ r \ n tại lambda_method ( Đóng cửa) \ r \ n tại System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create (yêu cầu HttpRequestMessage, HttpControllerDescriptor controllerDescriptor, Type controllerType) "}} Văn hóa = trung lập, PublicKeyToken = b03f5f7f11d50a3a 'hoặc một trong các phụ thuộc của nó. Hệ thống không thể tìm thấy tệp được chỉ định. "," ExceptionType ":" System.IO.FileNotFoundException "," StackTrace ":" tại Company.Project.Service.CompanyIntegrationApiService..ctor (Uri baseAddress) \ r \ n tại Company.Project .BackOffice.Web.Controllers.OrderController..ctor () trong C: \ project \ company-project \ src \ Company.Project.BackOffice.Web \ Controllers \ Order \ OrderController.cs: dòng 30 \ r \ n tại lambda_method ( Đóng cửa) \ r \ n tại System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create (yêu cầu HttpRequestMessage, HttpControllerDescriptor controllerDescriptor, Type controllerType) "}}
Khi tôi bắt đầu xem xét các tập hợp, tôi có thể thấy rằng dự án web và dự án dịch vụ của tôi đã nhắm mục tiêu các phiên bản khác nhau cho System.Net.Http
.
Dự án web:
Dự án dịch vụ:
Thật dễ dàng để nghĩ rằng điều này là do sự không phù hợp trong các phiên bản, nhưng mấu chốt ở đây là xem lỗi The system cannot find the file specified.
.
Nhìn vào thuộc tính đường dẫn, chúng ta có thể thấy rằng dự án web nhắm mục tiêu một lắp ráp .Net Framework trong khi dịch vụ nhắm mục tiêu một hợp ngữ từ Visual Studio 2017. Vì máy chủ không được cài đặt Visual Studio 2017, lỗi thời gian chạy sẽ xảy ra.
Đường dẫn web:
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Net.Http.dll
Đường dẫn dịch vụ:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Microsoft\Microsoft.NET.Build.Extensions\net461\lib\System.Net.Http.dll
Một cái gì đó đơn giản như việc thiết Copy Local
để true
có thể khắc phục vấn đề này, tuy nhiên không phải trong mọi trường hợp.
Để tạo lại lỗi trên máy cục bộ của bạn, chỉ cần xóa System.Net.Http.dll
khỏi thư mục cụ thể Visual Studio. Điều này sẽ cung cấp cho bạn lỗi thời gian chạy và có thể là một số lỗi xây dựng. Sau khi những thứ này được khắc phục, mọi thứ sẽ hoạt động, ít nhất nó đã làm cho tôi.
Nếu bạn đã cài đặt System.Net.Http
thông qua, NuGet
hãy kiểm tra lắp ráp nào được sử dụng bằng cách xem .csproj
phiên bản. System.Net.Http 4.3.4
cho ví dụ như lắp ráp sau:
<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>
Nếu bạn sử dụng một máy chủ xây dựng như Jenkins, TeamCity hoặc AppVeyor, thời gian chạy bị thiếu cũng .dll
có thể tồn tại ở đó. Trong trường hợp này, việc sử dụng phiên bản NuGet của System.Net.Http hoặc xóa .dll
cục bộ bị thiếu có thể không hữu ích . Để giải quyết lỗi này, hãy xem phiên bản không tìm thấy và phiên bản cụ thể PublicKeyToken
. Sau đó, tạo một chuyển hướng ràng buộc trong một trong hai Web.config
hoặc App.config
tùy thuộc vào dự án của bạn. Trong trường hợp của tôi, tôi muốn sử dụng 4.0.0.0 thay thế:
<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>
Một chủ đề Github hay về vấn đề này:
https://github.com/dotnet/corefx/issues/22781