ไซต์หยุดทำงานในระบบ asp.net WebWebPages.Razor.Configuration.HostSection ไม่สามารถส่งไปยัง


115

ฉันมีปัญหาเช่นนี้บนเซิร์ฟเวอร์

[A] System.WebWebPages.Razor.Configuration.HostSection ไม่สามารถส่งไปยัง [B] System.WebWebPages.Razor.Configuration.HostSection ประเภท A มาจาก 'System.Web.WebPages.Razor เวอร์ชัน = 2.0.0.0 วัฒนธรรม = เป็นกลาง PublicKeyToken = 31bf3856ad364e35' ในบริบท 'ค่าเริ่มต้น' ที่ตำแหน่ง 'C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System .Web.WebPages.Razor \ v4.0_2.0.0.0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll' ประเภท B มาจาก 'System.Web.WebPages.Razor เวอร์ชัน = 1.0.0.0 วัฒนธรรม = เป็นกลาง PublicKeyToken = 31bf3856ad364e35' ในบริบท 'ค่าเริ่มต้น' ที่ตำแหน่ง 'C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System .Web.WebPages.Razor \ v4.0_1.0.0.0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll'

คำอธิบาย: มีข้อยกเว้นที่ไม่สามารถจัดการได้เกิดขึ้นระหว่างการดำเนินการตามคำขอของเว็บปัจจุบัน โปรดตรวจสอบการติดตามสแต็กสำหรับข้อมูลเพิ่มเติมเกี่ยวกับข้อผิดพลาดและที่มาที่ไปในโค้ด

รายละเอียดข้อยกเว้น: System.InvalidCastException: [A] System.WebWebPages.Razor.Configuration.HostSection ไม่สามารถส่งไปยัง [B] System.WebWebPages.Razor.Configuration.HostSection ประเภท A มาจาก 'System.Web.WebPages.Razor เวอร์ชัน = 2.0.0.0 วัฒนธรรม = เป็นกลาง PublicKeyToken = 31bf3856ad364e35' ในบริบท 'ค่าเริ่มต้น' ที่ตำแหน่ง 'C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System .Web.WebPages.Razor \ v4.0_2.0.0.0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll' ประเภท B มาจาก 'System.Web.WebPages.Razor เวอร์ชัน = 1.0.0.0 วัฒนธรรม = เป็นกลาง PublicKeyToken = 31bf3856ad364e35' ในบริบท 'ค่าเริ่มต้น' ที่ตำแหน่ง 'C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System .Web.WebPages.Razor \ v4.0_1.0.0.0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll'

ข้อผิดพลาดที่มา:

ฉันได้ติดตั้ง MVC 3 บน serer และบนคอมพิวเตอร์ของฉัน ฉันได้ลองแทนที่ด้วย codebase เก่า 15 วันแล้ว แต่ยังมีปัญหาเดียวกัน

ตอนนี้ฉันต้องการแก้ปัญหา มีใครรู้บ้างว่าฉันจะแก้ไขได้อย่างไร


ดูเหมือนว่าในแอปพลิเคชันของคุณบางชุดมีการอ้างอิงกับมีดโกนรุ่นต่างๆ ลองตรวจสอบชุดประกอบของคุณด้วย ildasm หรือ. NET Reflector เพื่อดูการอ้างอิง
Paulo Morgado

คำตอบ:


200

ในรูท Web.config ตรวจสอบให้แน่ใจว่า assemblyBinding มีเวอร์ชันที่เหมาะสมสำหรับแอสเซมบลี "System.WebWebPages.Razor" และ "System.Web.Mvc" ตรวจสอบการมีอยู่จริงรวมทั้งแท็กประกอบ "System.WebPages.Razor" ของฉันซึ่งทำให้เกิดข้อผิดพลาด ฉันมีเวอร์ชันแอสเซมบลีของฉันตั้งค่าเป็น 3.0 และ 5.0 ตามลำดับในช่วงเวลาที่เขียนด้วยการอัปเดต NuGet แบบเต็ม โค้ดควรมีลักษณะดังนี้ 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 dependAssembly และ MVC ยังคงกล่าวว่า oldVersion = "1.0.0.0-4.0.0.0" newVersion = "4.0.0.0" เพิ่ม Razor dependAssembly XML ด้านบนและเปลี่ยน 4.0.0.0 เป็น 5.0.0.0 และลุงของ Bob
Scott Baker

2
สิ่งนี้ได้ผลสำหรับฉันขอบคุณ ฉันมี "System.Web.WebPages" ที่มีการผูกที่ถูกต้อง แต่มันใช้งานไม่ได้จนกว่าฉันจะเพิ่มคีย์ Razor ด้วย อย่างไรก็ตามในโปรเจ็กต์อื่น ๆ ฉันไม่จำเป็นต้องทำเช่นนั้นฉันไม่แน่ใจว่าความแตกต่างคืออะไรและเหตุใดการผูกระดับซุปเปอร์คลาสจึงไม่สามารถจัดการกับ Razor ได้ มีใครรู้คำตอบไหม
เชน

เหมือนกันที่นี่ ฉันมีรายการ MVC แต่ไม่มีรายการ Razor ตอนนี้ใช้งานได้แล้ว ขอบคุณ.
Yves Tkaczyk


40

กรณีของฉันกำลังอัปเกรดจาก mvc4 เป็น mvc5

ฉันตรวจสอบให้แน่ใจว่าข้อมูลอ้างอิงของฉันตรงกัน (ด้วยแอป mvc5 ที่สร้างขึ้นใหม่) อัปเดตไฟล์ web.config ตามนั้น แต่ก็ยังใช้งานไม่ได้ ในที่สุดมันก็ใช้งานได้เมื่อฉันเปลี่ยนไฟล์ web.config ( INSIDE THE VIEWS directory ) จาก:

<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
โรมัน

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 ด้วย
gligoran

4
ใช่ปัญหาคือโฟลเดอร์ Views web.config สำหรับฉัน
Matthew Nichols

15

โซลูชันของ Ian ใช้งานได้ในโครงการเดียว แต่สำหรับคนอื่น ๆ ฉันต้องการข้อมูลที่สมบูรณ์กว่านี้ในวิธีอัปเกรดเป็น MVC 5 และ Web API 2


บทความนี้ทำเพื่อฉัน ขอบคุณ!
gligoran

ฉันคิดว่าบทความนี้มีคำอธิบายการอัปเกรดที่ถูกต้องและสมบูรณ์ที่สุดขอขอบคุณ
Mikhail Brinchuk

1

ปัญหานี้เกิดขึ้นบ่อยมากเมื่อคุณกำลังพัฒนาสำหรับ MVC 4 จากนั้นคุณติดตั้งแพ็คเกจที่มีอยู่ในเวอร์ชันใหม่กว่าดังนั้นจึงทำให้แอปพลิเคชันทั้งหมดเสียหาย

ทางออกเดียวสำหรับปัญหาดังกล่าวคือการอัปเกรดแอปพลิเคชันทั้งหมดของคุณเป็นรุ่นใหม่หรือติดตั้งแพ็คเกจเก่าที่เข้ากันได้กับแอปพลิเคชันของคุณ


1

ปัญหา:

[A] System.WebWebPages.Razor.Configuration.HostSection ไม่สามารถส่งไปยัง [B] System.WebWebPages.Razor.Configuration.HostSection ประเภท A มาจาก 'System.Web.WebPages.Razor เวอร์ชัน = 2.0.0.0 วัฒนธรรม = เป็นกลาง PublicKeyToken = 31bf3856ad364e35' ในบริบท 'ค่าเริ่มต้น' ที่ตำแหน่ง 'C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System .Web.WebPages.Razor \ v4.0_2.0.0.0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll' ประเภท B มาจาก 'System.Web.WebPages.Razor เวอร์ชัน = 3.0.0.0 วัฒนธรรม = เป็นกลาง PublicKeyToken = 31bf3856ad364e35' ในบริบท 'ค่าเริ่มต้น' ที่ตำแหน่ง 'C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ ไฟล์ ASP.NET ชั่วคราว \ rbs.ceds.todomvcdemo \ 73d0b7c7 \ 46e3986d \ assembly \ dl3 \ 21020800 \ 101279fc_da94cf01 \ System.WebWebPages.Razor.dll '

บัตรประจำตัว:

ข้อผิดพลาดเกิดจากไฟล์การกำหนดค่าเช่น web.config ของโครงการของคุณ

ที่นี่คุณจะพบว่าเวอร์ชัน Razor ถูกตั้งค่าเป็น 2.0.0.0 โดยที่ในโปรเจ็กต์ 2.0.0.0 ไม่มีให้ใช้งาน

สารละลาย:

มันง่ายมากเพียงแค่เปลี่ยนเวอร์ชันจาก 2.0.0.0 เป็น 3.0.0.0 และมันจะทำเวทมนตร์

พิมพ์ = "System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.WebWebPages.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.