เพิ่มเติมจากคำตอบที่ @AndreiU ให้แล้วและวิธีการสร้างข้อผิดพลาดรันไทม์ภายในเครื่อง
ฉันได้รับข้อผิดพลาดรันไทม์ด้านล่างเมื่อปรับใช้กับ Azure ไม่ใช่ในเครื่อง
ไม่สามารถโหลดไฟล์หรือแอสเซมบลี 'System.Net.Http, Version = 4.2.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a' หรือการอ้างอิงอย่างใดอย่างหนึ่ง ระบบไม่พบไฟล์ที่ระบุ "," ExceptionType ":" System.IO.FileNotFoundException "," StackTrace ":" ที่ Company.Project.Service.CompanyIntegrationApiService..ctor (Uri baseAddress) \ r \ n ที่ Company.Project .BackOffice.Web.Controllers.OrderController..ctor () ใน C: \ projects \ company-project \ src \ Company.Project.BackOffice.Web \ Controllers \ Order \ OrderController.cs: บรรทัด 30 \ r \ n ที่ lambda_method ( Closure) \ r \ n ที่ System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create (คำขอ HttpRequestMessage, HttpControllerDescriptor controllerDescriptor, Type controllerType) "}} วัฒนธรรม = เป็นกลาง PublicKeyToken = b03f5f7f11d50a3a 'หรือการอ้างอิงอย่างใดอย่างหนึ่ง ระบบไม่พบไฟล์ที่ระบุ "," ExceptionType ":" System.IO.FileNotFoundException "," StackTrace ":" ที่ Company.Project.Service.CompanyIntegrationApiService..ctor (Uri baseAddress) \ r \ n ที่ Company.Project .BackOffice.Web.Controllers.OrderController..ctor () ใน C: \ projects \ company-project \ src \ Company.Project.BackOffice.Web \ Controllers \ Order \ OrderController.cs: บรรทัด 30 \ r \ n ที่ lambda_method ( Closure) \ r \ n ที่ System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create (คำขอ HttpRequestMessage, HttpControllerDescriptor controllerDescriptor, Type controllerType) "}} วัฒนธรรม = เป็นกลาง PublicKeyToken = b03f5f7f11d50a3a 'หรือการอ้างอิงอย่างใดอย่างหนึ่ง ระบบไม่พบไฟล์ที่ระบุ "," ExceptionType ":" System.IO.FileNotFoundException "," StackTrace ":" ที่ Company.Project.Service.CompanyIntegrationApiService..ctor (Uri baseAddress) \ r \ n ที่ Company.Project .BackOffice.Web.Controllers.OrderController..ctor () ใน C: \ projects \ company-project \ src \ Company.Project.BackOffice.Web \ Controllers \ Order \ OrderController.cs: บรรทัด 30 \ r \ n ที่ lambda_method ( Closure) \ r \ n ที่ System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create (คำขอ HttpRequestMessage, HttpControllerDescriptor controllerDescriptor, Type controllerType) "}}
System.Net.Http
เมื่อผมเริ่มมองหาที่ประกอบฉันจะได้เห็นว่าโครงการเว็บและการบริการของฉันที่กำหนดเป้าหมายโครงการรุ่นที่แตกต่างกันสำหรับ
โครงการเว็บ:
โครงการบริการ:
มันเป็นเรื่องง่ายที่จะคิดว่านี้เกิดจากที่ไม่ตรงกันในรุ่น The system cannot find the file specified.
แต่ที่สำคัญที่นี่คือการมองไปที่ข้อผิดพลาด
เมื่อมองไปที่คุณสมบัติเส้นทางเราจะเห็นว่าโครงการเว็บกำหนดเป้าหมายแอสเซมบลี. 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>
<Private>True</Private>
</Reference>
หากคุณใช้บิลด์เซิร์ฟเวอร์เช่น Jenkins, TeamCity หรือ AppVeyor รันไทม์ที่ขาดหายไป.dll
อาจมีอยู่เช่นกัน ในกรณีนี้อาจไม่ช่วยในการใช้ System.Net.Http เวอร์ชัน NuGet หรือการลบสิ่งที่หายไป.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