사이트가 asp.net에서 작동을 중지했습니다. System.Web.WebPages.Razor.Configuration.HostSection을 캐스팅 할 수 없습니다.


115

서버에 이와 같은 문제가 있습니다.

[A] System.Web.WebPages.Razor.Configuration.HostSection은 [B] System.Web.WebPages.Razor.Configuration.HostSection으로 캐스팅 할 수 없습니다. 유형 A는 'C : \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System'위치의 'Default'컨텍스트에서 'System.Web.WebPages.Razor, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35'에서 시작됩니다. .Web.WebPages.Razor \ v4.0_2.0.0.0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll '. 유형 B는 'C : \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System'위치의 컨텍스트 'Default'에있는 'System.Web.WebPages.Razor, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35'에서 시작됩니다. .Web.WebPages.Razor \ v4.0_1.0.0.0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll '.

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

예외 정보 : System.InvalidCastException : [A] System.Web.WebPages.Razor.Configuration.HostSection은 [B] System.Web.WebPages.Razor.Configuration.HostSection으로 캐스팅 할 수 없습니다. 유형 A는 'C : \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System'위치의 'Default'컨텍스트에서 'System.Web.WebPages.Razor, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35'에서 시작됩니다. .Web.WebPages.Razor \ v4.0_2.0.0.0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll '. 유형 B는 'C : \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System'위치의 컨텍스트 'Default'에있는 'System.Web.WebPages.Razor, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35'에서 시작됩니다. .Web.WebPages.Razor \ v4.0_1.0.0.0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll '.

소스 오류 :

서버와 컴퓨터에 MVC 3을 설치했습니다. 15 일 된 코드베이스로 교체하려고 시도했지만 동일한 문제가 있습니다.

이제 그것을 해결하고 싶습니다. 누군가 내가 어떻게 고칠 수 있는지 알고 있습니까?


응용 프로그램에서 일부 어셈블리에는 다른 버전의 razor에 대한 종속성이있는 것 같습니다. ildasm 또는 .NET Reflector로 어셈블리를 검사하여 종속성을 확인하십시오.
Paulo Morgado 2013

답변:


200

루트 Web.config에서 assemblyBinding에 "System.Web.WebPages.Razor"및 "System.Web.Mvc"어셈블리에 대한 적절한 버전이 포함되어 있는지 확인합니다. 실제 존재 여부와 "System.Web.WebPages.Razor"어셈블리 태그가 누락되어 오류가 발생했는지 확인합니다. 이 글을 쓰는 시점에 전체 NuGet 업데이트로 어셈블리 버전을 각각 3.0과 5.0으로 설정했습니다. 코드는 다음과 같아야합니다. publicKeyToken은 버전간에 동일하게 유지됩니다. 건배!

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <!--some more bidings-->
  <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages.Razor"
            publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
  </dependentAssembly>

  <dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="1.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
  </dependentAssembly>
<!--some more bidings-->
</assemblyBinding>

2
나를 위해 일했습니다. Razor 정보가 누락되었고 MVC가 잘못된 버전을 가리 켰습니다.
Hoakie

@Hoakie와 동일한 상황-Razor를 3.0.0으로 업데이트하고 MVC를 5.0.0으로 업데이트했으며 Razor 종속 어셈블리 참조가 없었으며 MVC는 여전히 oldVersion = "1.0.0.0-4.0.0.0"newVersion = "4.0.0.0"이라고 말했습니다. 위에 Razor dependentAssembly XML을 추가하고 4.0.0.0을 5.0.0.0과 Bob의 삼촌으로 변경했습니다.
Scott Baker

2
이것은 나를 위해 일했습니다. 올바른 바인딩이있는 "System.Web.WebPages"가 있었지만 Razor 키를 추가 할 때까지 작동하지 않았습니다. 그러나 다른 프로젝트에서는 그렇게 할 필요가 없었습니다. 차이점이 무엇인지, 왜 슈퍼 클래스 바인딩이 Razor를 처리하지 않는지 잘 모르겠습니다. 아무도 답을 알고 있습니까?
Shane

여기도 마찬가지입니다. MVC 항목은 있지만 Razor 항목은 없습니다. 이제 작동합니다. 감사합니다.
Yves Tkaczyk 2013


40

제 케이스는 mvc4에서 mvc5로 업그레이드되었습니다.

내 참조가 (새로 생성 된 mvc5 앱과) 동기화되어 있는지 확인하고 그에 따라 web.config 파일을 업데이트했지만 여전히 작동하지 않았습니다. 내 web.config 파일 ( INSIDE THE VIEWS 디렉토리 )을 다음에서 변경했을 때 마침내 작동했습니다 .

<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
  <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
  <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
</sectionGroup>

이에:

<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
  <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
  <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
</sectionGroup>

기억하세요 : iis (익스프레스 또는 네이티브) 중지, 솔루션 정리, 빌드 및 실행.


이 응답이 실제로 답이되어야한다고 생각합니다. mvc4에서 mvc5로 업그레이드하기 위해 업데이트 패키지 접근 방식을 사용할 때 어셈블리 바인딩은 일반적으로 괜찮습니다.
Roman

34

ian의 답변이 충분하지 않은 경우 (어셈블리가 정확하지만 캐스팅이 여전히 잘못된 경우) <configSections>아직 새 어셈블리를 반영하도록을 업데이트하지 않았을 가능성이 있습니다 . 어셈블리 부분도 System.Web.WebPages.Razor라이브러리의 버전 3.0을 참조하는지 확인하십시오 . 예 :

<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
    <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" />
    <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" />
</sectionGroup>

( version=3.0.0지금은 모두 참조 )


8
루트 Web.Config에서 이러한 설정을 찾을 수 없으면 Views 폴더의 Web.Config도 확인하십시오.
gligoran

4
예, 문제는 나를 위해 Views 폴더 web.config였습니다.
Matthew Nichols


1

이 문제는 MVC 4 용으로 개발 한 다음 갑자기 새 버전에서 사용할 수있는 패키지를 설치하여 전체 응용 프로그램을 손상시킬 때 매우 일반적입니다.

이러한 문제에 대한 유일한 해결책은 전체 애플리케이션을 최신으로 업그레이드하거나 애플리케이션과 호환되는 이전 패키지를 설치하는 것입니다.


1

문제:

[A] System.Web.WebPages.Razor.Configuration.HostSection은 [B] System.Web.WebPages.Razor.Configuration.HostSection으로 캐스팅 할 수 없습니다. 유형 A는 'C : \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System'위치의 'Default'컨텍스트에서 'System.Web.WebPages.Razor, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35'에서 시작됩니다. .Web.WebPages.Razor \ v4.0_2.0.0.0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll '. 유형 B는 'C : \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 위치의 컨텍스트'Default '에있는'System.Web.WebPages.Razor, Version = 3.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35 '에서 시작됩니다. \ Temporary ASP.NET Files \ rbs.ceds.todomvcdemo \ 73d0b7c7 \ 46e3986d \ assembly \ dl3 \ 21020800 \ 101279fc_da94cf01 \ System.Web.WebPages.Razor.dll '.

신분증:

이 오류는 프로젝트의 구성 파일 (예 : web.config)에 있습니다.

여기에서 Razor 버전이 2.0.0.0으로 설정되어 있으며 프로젝트 2.0.0.0 버전을 사용할 수 없습니다.

해결책:

간단합니다. 버전을 2.0.0.0에서 3.0.0.0으로 변경하기 만하면됩니다.

type = "System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version = 3.0.0.0 type ="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor , 버전 = 3.0.0.0

리디렉션을 넣을 필요가 없습니다. 그렇게하면 일이 복잡해집니다.


0

문제와 해결책을 찾았습니다.

1 내 코드를 4.0으로 타겟팅 한 다음 코드를 업로드하면 작동합니다. 그 전에 코드를 asp.net MVC 4로 업데이트합니다.

이제 작동합니다 :)


3
좀 더 구체적으로 말씀해 주시겠습니까?
nwayve

0

시스템에서 두 개의 dll 파일 위치를 열고 파일 위치의 dll 중 하나를 다른 위치에 복사
하고 프로젝트를 실행 해보십시오.


0

참조를 업데이트하지 않고이 문제를 해결하는 또 다른 방법은 다음과 같습니다.

  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-5.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Pages.Razor" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-3.2.0.0" newVersion="1.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.