Azure 웹 사이트에 게시 한 후 파일 또는 어셈블리 System.Web.Http.WebHost를로드 할 수 없습니다.


141

웹 프로젝트를 만들었고 Visual Studio에서 잘 실행됩니다. 그러나 azurewebsites에 게시 한 후 다음 오류가 발생했습니다. 무엇이 문제를 일으킬 수 있습니까?

파일 또는 어셈블리 'System.Web.Http.WebHost, Version = 5.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35'또는 해당 종속성 중 하나를로드 할 수 없습니다. 찾은 어셈블리의 매니페스트 정의가 어셈블리 참조와 일치하지 않습니다. (HRESULT 예외 : 0x80131040)

설명 : 현재 웹 요청을 실행하는 동안 처리되지 않은 예외가 발생했습니다. 오류 및 코드에서 발생한 위치에 대한 자세한 정보는 스택 추적을 검토하십시오.

예외 정보 : System.IO.FileLoadException : 파일 또는 어셈블리 'System.Web.Http.WebHost, Version = 5.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35'또는 해당 종속성 중 하나를로드 할 수 없습니다. 찾은 어셈블리의 매니페스트 정의가 어셈블리 참조와 일치하지 않습니다. (HRESULT 예외 : 0x80131040)

소스 오류 :

현재 웹 요청을 실행하는 동안 처리되지 않은 예외가 생성되었습니다. 예외의 출처와 위치에 관한 정보는 아래 예외 스택 추적을 사용하여 식별 할 수 있습니다.

어셈블리로드 추적 : 다음 정보는 'System.Web.Http.WebHost, Version = 5.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35'어셈블리를로드 할 수없는 이유를 확인하는 데 도움이 될 수 있습니다.

WRN : 어셈블리 바인딩 로깅이 꺼져 있습니다. 어셈블리 바인드 실패 로깅을 사용 가능하게하려면 레지스트리 값 [HKLM \ Software \ Microsoft \ Fusion! EnableLog] (DWORD)를 1로 설정하십시오. 참고 : 어셈블리 바인드 실패 로깅과 관련하여 일부 성능 저하가 있습니다. 이 기능을 끄려면 레지스트리 값 [HKLM \ Software \ Microsoft \ Fusion! EnableLog]를 제거하십시오.

다음은 web.config 파일의 일부입니다.

  <system.web>
    <customErrors mode="Off"/>
    <compilation debug="true" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5" />
    <authentication mode="Forms">
      <forms loginUrl="~/Account/Login" timeout="2880" />
    </authentication>
    <pages>
      <namespaces>
        <add namespace="System.Web.Helpers" />
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Optimization" />
        <add namespace="System.Web.Routing" />
        <add namespace="System.Web.WebPages" />
      </namespaces>
    </pages>
  </system.web>
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
  <handlers>
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers></system.webServer>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="DotNetOpenAuth.Core" publicKeyToken="2780ccd10d57b246" />
        <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.1.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="DotNetOpenAuth.AspNet" publicKeyToken="2780ccd10d57b246" />
        <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.1.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-1.5.2.14234" newVersion="1.5.2.14234" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="EntityFramework" publicKeyToken="b77a5c561934e089" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>

답변:


129

dll게시 (배치 환경)에 없습니다. 이것이 로컬 웹 사이트에서는 작동하지만 Azure 웹 사이트 환경에서는 작동하지 않는 이유입니다.

그냥 할 Copy Local = true어셈블리 (의 속성에 System.Web.Http.WebHost ) 다음 재배포을, 그것을 잘 작동합니다.

비슷한 오류가 발생하는 경우 (예 : 다른 어셈블리가 누락 된 경우) 해당 어셈블리를 copylocal = true로 설정하고 재배치하는 경우 종속성이 확실하지 않은 경우이 과정을 반복적으로 반복하십시오.


2
Copy Local이미 True입니다. 이상하게도 Runtime Versionv5 대신 v4.0.30319입니까?
ca9163d9

4
여기서 무슨 일이 있었는지 아십니까? 나는 이것이 뛰어 올라 나를 때린 18 개월 동안 잘 달리고있었습니다.
Glenn Gordon

2
이것은 문제를 해결했습니다. 감사합니다! 그러나 프로젝트에 프레임 워크 라이브러리를 포함시켜야한다는 것이 이상하게 보입니다 (제 경우에는 Azure가 아니라 IIS 서버). 아무도 업데이트를 실행하는 경우를 알고 있으므로 더 이상 포함시키지 않아도됩니까?
edgarpetrauskas 8

1
로컬 복사를 찾는 데 영원히 필요한 미니 애드온 : VS2013에서는 프로젝트에서 "참조"노드를 열고 "로컬 복사"를 설정하려는 라이브러리에서 마우스 오른쪽 버튼을 클릭하고 속성을 클릭하십시오.
ArtHare

6
로컬 복사가 이미 true로 설정되어 있고 종속성으로 인해 WebApi를 업데이트 할 수없는 경우 로컬 복사를 false로 설정하고 빌드 한 다음 로컬 복사를 다시 true로 설정하고 빌드하는 트릭이 있습니다. 왜 이것이 작동하는지 모르겠습니다.
DeeArgee

90

여전히 답을 찾고 있다면이 질문 스레드를 확인하십시오 . 비슷한 문제를 해결하는 데 도움이되었습니다.

편집 : Update-Package Microsoft.AspNet.WebApi -reinstallPathoschild가 제안한 것처럼 NugGet 패키지 관리자에서 실행하는 데 도움이되는 솔루션 이었습니다. 그런 다음 Sergey Osypchuk 제안한대로 내 .suo 파일을 삭제하고 VS를 다시 시작해야했습니다 .


링크 전용 답변을 피하십시오 .. 위의 링크에서 관련 정보를 게시하십시오 ..
Anvesh Yalamarthy

3
Update-Package 명령을 실행하면 문제가 해결되었지만 다른 제안 사항은 작동하지 않았습니다. 답변 감사합니다!
DigiOz Multimedia

문제에 대한 최상의 해결책.
Festim Cahani

완벽한 답변, 감사합니다!
Apolo

3
이 솔루션은 저에게도 효과적이었습니다. ReSharper의 '사용하지 않은 어셈블리 제거'기능으로 인해 발생한 것입니다. 사용하지 않는 어셈블리 제거 때때로 NuGet 패키지 내용을 확인하지 않고 어셈블리를 맹목적으로 제거합니다.
Joe King

54

나는 같은 문제를 만났고 CopyLocal다음 라이브러리에 대해 true 로 설정 하여 해결했습니다 .

System.Web.Http.dll
System.Web.Http.WebHost.dll
System.Net.Http.Formatting.dll

MVC4 및 NET 4를 사용하도록 추가해야합니다.


도움이되어 주셔서 감사합니다. 왜이 파일들이 GAC에만 있지는 않습니까? 다른 사이트에서 다른 닷넷 프레임 워크 등을 사용할 수 있기 때문입니까?
dellyjm

이 문제는 Microsoft가 해당 영역에 중요한 수정 프로그램을 적용한 이후에 발생했습니다 (System.Web / ASP NET / MVC에서 추측). 이 네임 스페이스는 GAC (기본 NET 어셈블리가 아님)가 아니라 별도의 Visual Studio 또는 MVC 경로에 있다고 생각합니다.
Bronek

이것은 내 VPS의 문제를 해결했습니다 (이것은 단순한 문제 일뿐만 아니라)
Evilripper

이것은 나를 위해 일했습니다 (Azure를 사용하지는 않지만). .net 4.5 프레임 워크 환경에서 4.0 환경으로 프로젝트를 옮기고 모든 것이 끝날 때이 문제가 발생했습니다.
TheQ

1
위의 DeeArgee의 제안에 따르면, 나는 이미이 dll의 3 개 모두에 대해 LOCAL COPY = true였습니다. 그러나이 제안은 마침내 문제를 해결했습니다. "복사 로컬이 이미 true로 설정되어 있으면 로컬 복사를 false로 설정하고 빌드 한 다음 로컬 복사를 다시 true로 설정하고 빌드하는 트릭이 있습니다. 이것이 왜 작동하는지 모르겠습니다. – DeeArgee 11 월 19 일 15 일 17:16
Debbie A

34

나를 위해 다음 섹션을 web.config파일에 추가했습니다 .

<configuration>
...
    <runtime>
    ...
        <dependentAssembly>
            <assemblyIdentity name="System.Web.Http.WebHost" publicKeyToken="31bf3856ad364e35" culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-5.1.0.0" newVersion="5.1.0.0" />
        </dependentAssembly>
    ...
    </runtime>
...
</configuration>

이 예는 MVC 5.1을 나타냅니다. 누군가가 그러한 문제를 해결하는 데 도움이되기를 바랍니다.


2
당신은 굉장합니다. mvc5의 매력처럼 작동했습니다. 감사합니다
David Graça

2
고마워요, 나도 +1했습니다.이 질문을 한 사람은 이것을 답변으로 표시해야합니다!
Ray

또는 Microsoft.AspNet.WebApi.WebHostnuget을 통해 패키지를 추가하십시오 .
Optimax

15

나를 위해 게시 대화 상자의 설정에서 파일 게시 옵션에서 "대상에서 추가 파일 제거"를 선택한 후 작업을 시작했습니다.


나를 위해 일했다! 좋은데
Dr Schizo

이것이 나를 위해 일한 유일한 솔루션입니다. 나는 거기에 물건을 떨어 뜨린 dll의 다른 오래된 버전이 있다고 생각합니다. 감사!
Ohad Schneider

10

게시 된 (배포 된 환경)에 dll이 없습니다. 이것이 로컬 웹 사이트에서는 작동하지만 Azure 웹 사이트 환경에서는 작동하지 않는 이유입니다.

어셈블리 (System.Web.Http.WebHost)의 속성에서 Local = true 복사를 한 다음 재배치하면 제대로 작동합니다.


여기에서도 똑같이 필요한 것입니다.
pabloelustondo

1
아마도 동일한 솔루션이 1 년 전에 다른 답변에 설명되어 있기 때문일 것입니다.
차드

6

vs2012를 사용하고 있으며 업데이트 KB2781514가 일부 설정을 변경했다고 생각합니다. 내 MVC4 프로젝트의 모든 System.Web.Http가 false로 변경되어 계속이 메시지를 받았습니다. All file in this project게시 속성을 변경 했지만 작동하지 않습니다. 마지막으로 Copy Local = true하나씩 변경 하고이 문제를 해결해야합니다.


2

같은 오류가 발생하여 버전을 4에서 3으로 변경했으며 해결되었습니다.

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <!-- Ensure correct version of MVC -->
    <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
        <bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
    </dependentAssembly>
</assemblyBinding>

2

신청서에 같은 문제가있었습니다.

System.web.http.webhost not found.

system.web.http.webhostVisual Studio에서 실행하는 기본 프로젝트에서 파일 을 복사 하여 게시 된 프로젝트에 붙여 넣기 만하면됩니다.bin 디렉토리에 됩니다.

이 후 동일한 오류가 표시 될 수 있지만 디렉토리 이름이 변경 될 수 있습니다. system.web.http . 위와 동일한 절차를 따르십시오. 모든 파일이 업로드 된 후에 작동합니다. 이것은 Visual Studio의 nuget 패키지로 인해 인터넷에서 다운로드하지만 서버에서는 다운로드 할 수 없습니다.

이 파일은 프로젝트 bin디렉토리 에서 찾을 수 있습니다 .


1

이것은 VSVC (Update 5) /ASP.NET 4.5에서 MVC 및 Web API 2를 포함하는 "Web Application"프로젝트 유형으로 프로젝트에 발생했습니다. 프로젝트를 생성 한 직후 및 코드를 추가하기 전에 오류가 발생했습니다. 다음 구성을 추가하면 문제가 해결됩니다. "System.Web.Helpers"를 해결 한 후 "System.Web.Mvc"및 "System.Web.WebPages"에 대해 두 개의 유사한 오류가 발생합니다.

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.2.3.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>

0

여러 DLL이 없습니다. 다음에 게시 할 때 디렉토리에 수동으로 복사 한 경우에도 사라집니다. 각각은 이미 VS에서 로컬 복사로 설정되어 있습니다. 나를위한 해결책은 각각을 로컬로 복사 false로 설정하고 저장하고 빌드 한 다음 로컬로 복사하도록 설정했습니다. 이번에는 모든 DLL을 올바르게 게시했습니다. 이상한


0

솔루션에 여러 프로젝트가 있고이 오류로 인해 프로젝트 중 하나가 빌드되지 않으면 해당 프로젝트에 WebApi Core nuget 패키지를 설치했는지 확인하십시오. System.Web.Http에 대한 참조를 추가해도 도움이되지 않으므로 해당 프로젝트에 올바른 너겟 패키지를 설치해야합니다.

솔루션에 여러 프로젝트가 있었고 WebApi Core가 이미 다른 프로젝트에 설치되었습니다. 목록에서 어셈블리를 마우스 오른쪽 단추로 클릭하고 선택하여 System.Web.Http 어셈블리를 참조했지만 로컬에서는 정상적으로 작동하지만 Azure에서는 작동하지 않았습니다. 수동 참조를 제거하고 어셈블리 참조가 필요한 각 프로젝트에 WebApi Core nuget 패키지를 추가해야했습니다.


0

"로컬 복사"가 이미 True 인 경우 게시 된 파일을 제거한 후 다시 게시하면 작동하는 경우가 있습니다.

예를 들어 IIS를 사용하는 경우 웹 사이트와 웹 사이트가 게시 된 디렉토리의 내용을 제거한 다음 다시 게시하십시오.

대상에 이전 버전의 파일이있을 수 있으므로 이전 버전을 사용하지 않으려면 다시 게시하기 전에 모든 것을 삭제하십시오.


0

web.config에서 다음 항목을 제거하고 저에게 효과적이었습니다.

<dependentAssembly>
                <assemblyIdentity name="System.Web.Http.WebHost" culture="neutral" publicKeyToken="31BF3856AD364E35" />
                <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="5.2.6.0" />
            </dependentAssembly>

0

솔루션에서 패키지 버전이 동일한 지 확인하십시오. Microsoft.AspNet.Mvc솔루션 전체에서 패키지를 다운 그레이드 및 업그레이드 했으며 문제가 해결되었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.