@AndreiU가 이미 준 답변과 로컬에서 런타임 오류를 재현하는 방법에 대한 추가 사항입니다.
로컬이 아닌 Azure에 배포 할 때 아래와 같은 런타임 오류가 발생했습니다.
파일 또는 어셈블리 'System.Net.Http, Version = 4.2.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a'또는 해당 종속성 중 하나를로드 할 수 없습니다. 시스템이 Company.Project에서 Company.Project.Service.CompanyIntegrationApiService..ctor (Uri baseAddress) \ r \ n에서 지정된 파일을 찾을 수 없습니다. ","ExceptionType ":"System.IO.FileNotFoundException ","StackTrace ":" .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 ( Closure) \ r \ n at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create (HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType) "}} Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a '또는 해당 종속성 중 하나. 시스템이 Company.Project에서 Company.Project.Service.CompanyIntegrationApiService..ctor (Uri baseAddress) \ r \ n에서 지정된 파일을 찾을 수 없습니다. ","ExceptionType ":"System.IO.FileNotFoundException ","StackTrace ":" .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 ( Closure) \ r \ n at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create (HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType) "}} Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a '또는 해당 종속성 중 하나. 시스템이 Company.Project에서 Company.Project.Service.CompanyIntegrationApiService..ctor (Uri baseAddress) \ r \ n에서 지정된 파일을 찾을 수 없습니다. ","ExceptionType ":"System.IO.FileNotFoundException ","StackTrace ":" .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 ( Closure) \ r \ n at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create (HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType) "}}
어셈블리를 살펴보기 시작했을 때 웹 프로젝트와 서비스 프로젝트가 System.Net.Http
.
웹 프로젝트 :
봉사 프로젝트 :
이것은 버전의 불일치로 인해 발생한다고 생각하기 쉽지만 여기서 핵심은 오류를 확인하는 것 The system cannot find the file specified.
입니다.
path 속성을 보면 웹 프로젝트가 .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