2012-11-18 34 views
14

Sau khi nâng cấp lên ASP.NET MVC 4, ứng dụng được vi phạm về việc truy cập bất kỳ trang web được định nghĩa bên trong một Diện tíchCấu hình lỗi khi sử dụng khu vực trong ASP.NET MVC 4

Error screen shot

Mô tả: Một lỗi đã xảy ra trong xử lý tệp cấu hình cần thiết để phục vụ yêu cầu này. Vui lòng xem lại chi tiết lỗi cụ thể bên dưới và sửa đổi tệp cấu hình của bạn một cách thích hợp.

Thông báo lỗi trình phân tích cú pháp: Đã xảy ra lỗi khi tạo bộ xử lý phần cấu hình cho system.web.webPages.razor/hosts: Tên lắp ráp hoặc mã cơ sở đã cho không hợp lệ. (Ngoại lệ từ HRESULT: 0x80131047)

<section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=__WebPagesVersion__.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> 
+0

Có lẽ bạn có thể thử tạo một khu vực mới và so sánh web.config với địa chỉ cũ để xem sự khác biệt nào cần giải thích. – Despertar

+0

Có lẽ bạn đã cài đặt MVC 4 trên đầu MVC 3 mà không cần gỡ cài đặt nó trước. – Tariqulazam

+0

MVC 3 & MVC 4 được cho là cùng tồn tại. Phải không? Gỡ cài đặt MVC 3 không phải là một tùy chọn cho tôi. – Gopinath

Trả lời

16

gia tăng này như là một câu trả lời từ bình luận:

Version Thay đổi = _ WebPagesVersion _ .0.0 để Version = 2.0.0.0

Ngoài ra thấy nếu bạn có bất kỳ tệp web.config nào khác nổi trong dự án của bạn và xem giá trị nào được sử dụng ở đó - tôi hiểu rằng đôi khi nếu bạn có nhiều web.config tham chiếu phiên bản khác nhau của phần máy chủ, nó có thể khá khó chịu. BTW không cần phải gỡ cài đặt MVC 3 trước 4 - chúng cùng tồn tại một cách vui vẻ!

+0

Tôi phải tìm và thay thế trên web.config của mình vì mọi phiên bản đều chưa được xác định (được định nghĩa là '\ _WebPagesVersion \ _'). Cảm ơn câu trả lời của bạn. –

+0

Thêm chi tiết về lỗi này và bản sửa lỗi trên blog của tôi tại đây http://volaresystems.com/Blog/post/2012/12/11/Fix-for-weird-errors-in-MVC4-when-adding-a-new -Area.aspx –

2

Cuối cùng bạn phải làm theo đề nghị của @bUKaneer

thay đổi Version = WebPagesVersion .0.0 để Version = 2.0.0.0

Khi bạn thêm một lĩnh vực mới, bạn sẽ có tệp web.config của bạn cho khu vực mới dưới dạng: -

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

Cập nhật phần này bằng: -

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

Sau đó tìm/tìm kiếm

chủ

Mã của bạn sẽ trông như thế -

<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=__MvcVersion__.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 

Thay đổi nó để: -

<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 

Cuối cùng, hãy tìm

Bạn có thể tìm mã của bạn như

<pages 
     validateRequest="false" 
     pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=__MvcVersion__.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" 
     pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=__MvcVersion__.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" 
     userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=__MvcVersion__.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> 
     <controls> 
     <add assembly="System.Web.Mvc, Version=__MvcVersion__.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" /> 
     </controls> 
    </pages> 

Thay thế nó với: -

<pages 
     validateRequest="false" 
     pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" 
     pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" 
     userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> 
     <controls> 
     <add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" /> 
     </controls> 
    </pages> 

Các bản sao làm việc của Web.cấu hình sẽ như thế nào: -

<?xml version="1.0"?> 

<configuration> 
    <configSections> 
    <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> 
    </configSections> 

    <system.web.webPages.razor> 
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
    <pages pageBaseType="System.Web.Mvc.WebViewPage"> 
     <namespaces> 
     <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" /> 
     </namespaces> 
    </pages> 
    </system.web.webPages.razor> 

    <appSettings> 
    <add key="webpages:Enabled" value="false" /> 
    </appSettings> 

    <system.web> 
    <httpHandlers> 
     <add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/> 
    </httpHandlers> 

    <!-- 
     Enabling request validation in view pages would cause validation to occur 
     after the input has already been processed by the controller. By default 
     MVC performs request validation before a controller processes the input. 
     To change this behavior apply the ValidateInputAttribute to a 
     controller or action. 
    --> 
    <pages 
     validateRequest="false" 
     pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" 
     pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" 
     userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> 
     <controls> 
     <add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" /> 
     </controls> 
    </pages> 
    </system.web> 

    <system.webServer> 
    <validation validateIntegratedModeConfiguration="false" /> 

    <handlers> 
     <remove name="BlockViewHandler"/> 
     <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" /> 
    </handlers> 
    </system.webServer> 
</configuration> 
+0

u vừa cứu ngày của tôi, bro – ArgeKumandan

1

Đây là những gì làm việc cho tôi: Tôi đã có thời gian gần đây chạy Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform để cài đặt C# 6 hỗ trợ cho Razor, và tôi nghĩ rằng nó được cập nhật các thư viện này là tốt. Các giải pháp đơn giản cho tôi là để xác minh phiên bản của hội đồng trong tài liệu tham khảo của tôi (có một suy nghĩ! Lol). Trong trường hợp của tôi, assembly System.Web.WebPages.Razor có một "Version: 3.0.0.0" (nhấn chuột phải vào assembly và chọn "Properties"). Tôi tin rằng bất kỳ phiên bản nào đang hiển thị ở đó, hãy sao chép nó.

Trước:

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

Sau:

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

Hy vọng rằng sẽ giúp ai đó đã kết thúc mà tôi đã làm. ;)

Các vấn đề liên quan