Trang web đã ngừng hoạt động trong asp.net System.Web.WebPages.Razor.Configuration.HostSection không thể được chuyển thành


115

Tôi có một vấn đề như thế này trên máy chủ

[A] System.Web.WebPages.Razor.Configuration.HostSection có thể được chuyển thành [B] System.Web.WebPages.Razor.Configuration.HostSection. Loại A có nguồn gốc từ 'System.Web.WebPages.Razor, Version = 2.0.0.0, Culture = trung tính, PublicKeyToken = 31bf3856ad364e35' trong ngữ cảnh 'Mặc định' tại vị trí 'C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System .Web.WebPages.Razor \ v4.0_2.0.0.0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll '. Loại B có nguồn gốc từ 'System.Web.WebPages.Razor, Version = 1.0.0.0, Culture = trung tính, PublicKeyToken = 31bf3856ad364e35' trong ngữ cảnh 'Mặc định' tại vị trí 'C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System .Web.WebPages.Razor \ v4.0_1.0.0.0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll '.

Mô tả: Một ngoại lệ chưa được xử lý đã xảy ra trong quá trình thực hiện yêu cầu web hiện tại. Vui lòng xem lại dấu vết ngăn xếp để biết thêm thông tin về lỗi và nơi xuất phát trong mã.

Chi tiết ngoại lệ: System.InvalidCastException: [A] System.Web.WebPages.Razor.Configuration.HostSection có thể được chuyển thành [B] System.Web.WebPages.Razor.Configuration.HostSection. Loại A có nguồn gốc từ 'System.Web.WebPages.Razor, Version = 2.0.0.0, Culture = trung tính, PublicKeyToken = 31bf3856ad364e35' trong ngữ cảnh 'Mặc định' tại vị trí 'C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System .Web.WebPages.Razor \ v4.0_2.0.0.0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll '. Loại B có nguồn gốc từ 'System.Web.WebPages.Razor, Version = 1.0.0.0, Culture = trung tính, PublicKeyToken = 31bf3856ad364e35' trong ngữ cảnh 'Mặc định' tại vị trí 'C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System .Web.WebPages.Razor \ v4.0_1.0.0.0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll '.

Lỗi nguồn:

Tôi đã cài đặt MVC 3 trên serer và trên máy tính của tôi. Tôi đã thử thay thế nó bằng codebase 15 ngày tuổi nhưng vẫn tồn tại vấn đề tương tự.

bây giờ tôi muốn giải quyết nó Có ai biết làm thế nào tôi có thể sửa chữa nó.


Có vẻ như trong ứng dụng của bạn, một số hội đồng có sự phụ thuộc vào các phiên bản dao cạo khác nhau. Hãy thử kiểm tra các hội đồng của bạn với ildasm hoặc .NET Reflector để xem các phụ thuộc của nó.
Paulo Morgado

Câu trả lời:


200

Trong thư mục gốc Web.config, đảm bảo assemblyBinding chứa phiên bản phù hợp cho cụm "System.Web.WebPages.Razor" và "System.Web.Mvc". Kiểm tra sự tồn tại thực tế của chúng cũng như thẻ lắp ráp "System.Web.WebPages.Razor" của tôi bị thiếu gây ra lỗi. Tôi đã có các phiên bản lắp ráp của mình được đặt thành 3.0 và 5.0 tương ứng trong thời gian viết bài này với các bản cập nhật đầy đủ của NuGet. Mã sẽ trông giống như dưới đây. PublicKeyToken sẽ giữ nguyên giữa các phiên bản. Chúc mừng!

<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
Đã làm cho tôi. Tôi đã thiếu thông tin về Dao cạo và MVC chỉ vào phiên bản sai.
Hoakie

Tình huống tương tự như @Hoakie - đã cập nhật dao cạo lên 3.0.0 và MVC thành 5.0.0 và không có tài liệu tham khảo phụ thuộc dao cạo, và MVC vẫn nói oldVersion = "1.0.0.0-4.0.0.0" newVersion = "4.0.0.0". Đã thêm XML phụ thuộc dao cạoAssugging XML ở trên và thay đổi 4.0.0.0 thành 5.0.0.0 và chú của Bob.
Scott Baker

2
Điều này làm việc cho tôi cảm ơn. Tôi đã có "System.Web.WebPages" với các ràng buộc chính xác nhưng nó không hoạt động cho đến khi tôi cũng thêm khóa Dao cạo. Tuy nhiên, trong các dự án khác tôi không phải làm điều đó, tôi không chắc sự khác biệt là gì và tại sao các ràng buộc siêu hạng sẽ không xử lý được cho Dao cạo. Có ai biết câu trả lời không?
Shane

Tương tự ở đây. Tôi có mục MVC nhưng không phải là dao cạo. Bây giờ nó hoạt động. Cảm ơn bạn.
Yves Tkachot


40

Trường hợp của tôi đã nâng cấp từ mvc4 lên mvc5.

Tôi chắc chắn rằng các tài liệu tham khảo của tôi đã được đồng bộ hóa (với ứng dụng mvc5 mới được tạo), đã cập nhật tệp web.config cho phù hợp và nó vẫn không hoạt động. Cuối cùng nó cũng hoạt động khi tôi thay đổi tệp web.config (thư mục TRONG NỘI DUNG ) từ:

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

Về điều này:

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

HÃY NHỚ: dừng iis (thể hiện hoặc bản địa), giải pháp sạch, xây dựng và Chạy.


Tôi nghĩ rằng câu trả lời này nên là một câu trả lời thực sự. Liên kết lắp ráp thường ok khi sử dụng phương pháp gói cập nhật để nâng cấp từ mvc4 lên mvc5.
La Mã

34

Chỉ trong trường hợp câu trả lời của ian là không đủ (và các hội đồng đúng, nhưng việc truyền vẫn sai) có thể bạn chưa cập nhật <configSections>để phản ánh lắp ráp mới. đảm bảo phần lắp ráp cũng tham chiếu phiên bản 3.0 của System.Web.WebPages.Razorthư viện. ví dụ

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

(Lưu ý rằng tất cả chúng đều tham khảo version=3.0.0ngay bây giờ)


8
Tôi chỉ cần thêm rằng nếu bạn không thể tìm thấy các cài đặt này trong Web.Config gốc, hãy kiểm tra Web.Config trong thư mục Lượt xem.
gligoran

4
Có vấn đề là thư mục Lượt xem web.config đối với tôi.
Matthew Nichols

15

Giải pháp của Ian đã làm việc trong một dự án, nhưng đối với các dự án khác, tôi cần thông tin đầy đủ hơn trong Cách nâng cấp lên MVC 5 và API Web 2


Bài viết này đã làm điều đó cho tôi. Cảm ơn!
gligoran

Tôi nghĩ rằng bài viết này chứa mô tả nâng cấp chính xác và đầy đủ nhất, cảm ơn bạn.
Mikhail Brinchuk

1

Vấn đề này rất phổ biến khi bạn đang phát triển cho MVC 4 và sau đó bạn hoàn toàn cài đặt một gói có sẵn trong phiên bản mới hơn để nó phá vỡ toàn bộ ứng dụng.

Chỉ có giải pháp cho vấn đề đó là nâng cấp toàn bộ ứng dụng của bạn lên bản mới hơn hoặc cài đặt gói cũ tương thích với ứng dụng của bạn


1

Vấn đề:

[A] System.Web.WebPages.Razor.Configuration.HostSection có thể được chuyển thành [B] System.Web.WebPages.Razor.Configuration.HostSection. Loại A có nguồn gốc từ 'System.Web.WebPages.Razor, Version = 2.0.0.0, Culture = trung tính, PublicKeyToken = 31bf3856ad364e35' trong ngữ cảnh 'Mặc định' tại vị trí 'C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System .Web.WebPages.Razor \ v4.0_2.0.0.0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll '. Loại B có nguồn gốc từ 'System.Web.WebPages.Razor, Version = 3.0.0.0, Culture = trung tính, PublicKeyToken = 31bf3856ad364e35' trong ngữ cảnh 'Mặc định' tại vị trí 'C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Tệp ASP.NET tạm thời \ rbs.ceds.todomvcdemo \ 73d0b7c7 \ 46e3986d \ assembly \ dl3 \ 21020800 \ 101279fc_da94cf01 \ System.Web.WebPages.Razor.dll '.

Nhận biết:

Lỗi là với tệp cấu hình tức là web.config của dự án của bạn.

Ở đây bạn sẽ thấy rằng phiên bản Dao cạo được đặt thành 2.0.0.0 trong đó như trong phiên bản dự án 2.0.0.0 của bạn không có sẵn.

Giải pháp:

Thật đơn giản, chỉ cần thay đổi phiên bản từ 2.0.0.0 thành 3.0.0.0 và nó sẽ làm nên điều kỳ diệu.

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. , Phiên bản = 3.0.0.0

Bạn không cần phải chuyển hướng hoặc vì vậy nó sẽ làm cho mọi thứ trở nên phức tạp.


0

Tôi tìm thấy một vấn đề và giải pháp.

1 Tôi nhắm mục tiêu mã của mình lên 4.0 và sau đó tải lên mã và nó đã hoạt động. Trước đó tôi cũng cập nhật mã của mình lên asp.net MVC 4.

bây giờ nó hoạt động :)


3
Bạn có thể đặc sắc hơn không?
vào

0

Mở hai vị trí tệp dll trong hệ thống của bạn, sao chép một trong các dll trong vị trí tệp của bạn sang vị trí khác
và thử chạy dự án.


0

Một cách khác để khắc phục điều này, mà không phải cập nhật tài liệu tham khảo là

  <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>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.