Situs berhenti bekerja di asp.net System.Web.WebPages.Razor.Configuration.HostSection tidak dapat dilemparkan ke


115

Saya punya masalah seperti ini di server

[A] System.Web.WebPages.Razor.Configuration.HostSection tidak dapat dilemparkan ke [B] System.Web.WebPages.Razor.Configuration.HostSection. Tipe A berasal dari 'System.Web.WebPages.Razor, Versi = 2.0.0.0, Budaya = netral, PublicKeyToken = 31bf3856ad364e35' dalam konteks 'Default' di lokasi 'C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System .Web.WebPages.Razor \ v4.0_2.0.0.0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll '. Tipe B berasal dari 'System.Web.WebPages.Razor, Versi = 1.0.0.0, Budaya = netral, PublicKeyToken = 31bf3856ad364e35' dalam konteks 'Default' di lokasi 'C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System .Web.WebPages.Razor \ v4.0_1.0.0.0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll '.

Deskripsi: Terjadi pengecualian yang tidak tertangani selama eksekusi permintaan web saat ini. Harap tinjau pelacakan tumpukan untuk informasi lebih lanjut tentang kesalahan dan dari mana asalnya dalam kode.

Detail Pengecualian: System.InvalidCastException: [A] System.Web.WebPages.Razor.Configuration.HostSection tidak dapat dilemparkan ke [B] System.Web.WebPages.Razor.Configuration.HostSection. Tipe A berasal dari 'System.Web.WebPages.Razor, Versi = 2.0.0.0, Budaya = netral, PublicKeyToken = 31bf3856ad364e35' dalam konteks 'Default' di lokasi 'C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System .Web.WebPages.Razor \ v4.0_2.0.0.0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll '. Tipe B berasal dari 'System.Web.WebPages.Razor, Versi = 1.0.0.0, Budaya = netral, PublicKeyToken = 31bf3856ad364e35' dalam konteks 'Default' di lokasi 'C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System .Web.WebPages.Razor \ v4.0_1.0.0.0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll '.

Kesalahan Sumber:

Saya telah menginstal MVC 3 di serer dan di komputer saya. Saya telah mencoba menggantinya dengan basis kode berusia 15 hari tetapi masalah yang sama ada.

sekarang saya ingin menyelesaikannya. Apakah seseorang tahu bagaimana saya bisa memperbaikinya.


Sepertinya dalam aplikasi Anda beberapa rakitan memiliki ketergantungan pada berbagai versi pisau cukur. Coba periksa rakitan Anda dengan ildasm atau .NET Reflector untuk melihat ketergantungannya.
Paulo Morgado

Jawaban:


200

Di root Web.config pastikan assemblyBinding berisi versi yang tepat untuk assembly "System.Web.WebPages.Razor" dan "System.Web.Mvc". Periksa keberadaan mereka yang sebenarnya serta tag rakitan "System.Web.WebPages.Razor" saya hilang yang menyebabkan kesalahan. Saya menetapkan versi assembly saya masing-masing ke 3.0 dan 5.0 pada saat penulisan ini dengan pembaruan NuGet lengkap. Kode akan terlihat seperti di bawah ini. PublicKeyToken akan tetap sama di antara versinya. Bersulang!

<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
Bekerja untuk saya. Saya kehilangan informasi Razor dan MVC menunjuk ke versi yang salah.
Hoakie

Situasi yang sama seperti @Hoakie - memperbarui Razor ke 3.0.0 dan MVC ke 5.0.0 dan tidak ada referensi Perakitan tergantung Razor, dan MVC masih mengatakan oldVersion = "1.0.0.0-4.0.0.0" newVersion = "4.0.0.0". Menambahkan XML Razor dependentAssembly di atas dan mengubah 4.0.0.0 menjadi 5.0.0.0 dan paman Anda Bob.
Scott Baker

2
Ini berhasil untuk saya, terima kasih. Saya memang memiliki "System.Web.WebPages" dengan binding yang benar tetapi tidak berfungsi sampai saya juga menambahkan kunci Razor. Namun di proyek lain saya tidak harus melakukan itu, saya tidak yakin apa perbedaannya dan mengapa binding kelas super tidak dapat menangani Razor. Apakah ada yang tahu jawabannya?
Shane

Sama disini. Saya memiliki entri MVC tetapi bukan yang Razor. Sekarang bekerja. Terima kasih.
Yves Tkaczyk


40

Kasus saya ditingkatkan dari mvc4 ke mvc5.

Saya memastikan referensi saya sinkron (dengan aplikasi mvc5 yang baru dibuat), memperbarui file web.config sesuai dan masih tidak berfungsi. Akhirnya berhasil ketika saya mengubah file web.config saya ( INSIDE THE VIEWS directory ) dari:

<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>

Untuk ini:

<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>

INGAT: stop iis (ekspres atau asli), solusi bersih, bangun dan Jalankan.


Saya pikir tanggapan ini seharusnya menjadi jawaban sebenarnya. Pengikatan assembly biasanya tidak masalah saat menggunakan pendekatan update-package untuk mengupgrade dari mvc4 ke mvc5.
Roman

34

Untuk berjaga-jaga jika jawaban ian tidak cukup (dan rakitannya benar, tetapi castingnya masih salah) kemungkinan Anda belum memperbarui <configSections>untuk mencerminkan rakitan baru. pastikan bagian assembly juga mereferensikan System.Web.WebPages.Razorlibrary versi 3.0 . misalnya

<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>

(Perhatikan bahwa mereka semua merujuk version=3.0.0sekarang)


8
Saya hanya menambahkan bahwa jika Anda tidak dapat menemukan pengaturan ini di root Web.Config, periksa juga folder Web.Config di Views.
gligoran

4
Ya, masalahnya adalah folder Tampilan web.config untuk saya.
Matthew Nichols


1

Masalah ini sangat umum ketika Anda mengembangkan untuk MVC 4 dan kemudian secara tiba-tiba Anda menginstal paket yang tersedia di versi yang lebih baru sehingga merusak seluruh aplikasi.

Satu-satunya solusi untuk masalah tersebut adalah meningkatkan seluruh aplikasi Anda ke yang lebih baru atau menginstal paket lama yang kompatibel dengan aplikasi Anda


1

Masalah:

[A] System.Web.WebPages.Razor.Configuration.HostSection tidak dapat dilemparkan ke [B] System.Web.WebPages.Razor.Configuration.HostSection. Tipe A berasal dari 'System.Web.WebPages.Razor, Versi = 2.0.0.0, Budaya = netral, PublicKeyToken = 31bf3856ad364e35' dalam konteks 'Default' di lokasi 'C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System .Web.WebPages.Razor \ v4.0_2.0.0.0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll '. Tipe B berasal dari 'System.Web.WebPages.Razor, Versi = 3.0.0.0, Budaya = netral, PublicKeyToken = 31bf3856ad364e35' dalam konteks 'Default' di lokasi 'C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Berkas ASP.NET Sementara \ rbs.ceds.todomvcdemo \ 73d0b7c7 \ 46e3986d \ assembly \ dl3 \ 21020800 \ 101279fc_da94cf01 \ System.Web.WebPages.Razor.dll '.

Identifikasi:

Kesalahannya ada pada file konfigurasi yaitu web.config dari proyek Anda.

Di sini Anda akan menemukan bahwa versi Razor disetel ke 2.0.0.0 sedangkan dalam proyek Anda versi 2.0.0.0 tidak tersedia.

Larutan:

Sederhana, cukup ubah versinya dari 2.0.0.0 menjadi 3.0.0.0 dan itu akan melakukan keajaiban.

ketik = "System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Versi = 3.0.0.0 type =" System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor , Versi = 3.0.0.0

Anda tidak perlu menempatkan pengalihan atau karena itu akan membuat segalanya menjadi rumit.


0

Saya menemukan masalah dan solusi.

1 Saya menargetkan kode saya ke 4.0 dan kemudian mengunggah kode dan berhasil. Sebelumnya saya juga memperbarui kode saya ke asp.net MVC 4.

sekarang berhasil :)


3
Bisakah kamu lebih spesifik?
nwayve

0

Buka dua lokasi file dll di sistem Anda, salin salah satu dari dll di lokasi file Anda ke yang lain
dan coba jalankan proyek.


0

Cara lain untuk memperbaikinya, tanpa harus memperbarui referensi adalah ini

  <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>
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.