Trong trường hợp của tôi, sự cố này chỉ xảy ra trên PC của tôi cho một dự án. Dự án của tôi hoạt động tốt trong VS2012 nhưng khi mở vào VS2017 thì gặp sự cố này.
Vấn đề chính đối với tôi ở đây là bộ nhớ cache. Dự án của tôi đã trỏ đến các phiên bản dll được lưu trong bộ đệm cũ hơn cho Razor và MVC và nó không tìm thấy các tính năng được thêm vào trong các phiên bản mới hơn, chẳng hạn như ViewBag. ViewBag đã được thêm vào Razor phiên bản 3, nhưng vì tôi đã lưu vào bộ đệm Razor phiên bản 2 nên nó không thể tìm thấy ViewBag (nhưng nó có thể tìm thấy những thứ khác có trong phiên bản 2). Tuy nhiên, chỉ cần xóa bộ nhớ cache như trong câu trả lời được chấp nhận đã không khắc phục được sự cố của tôi. Chúng tôi đã phải thay đổi tệp cấu hình để nói "sử dụng phiên bản 3 thay vì 2" cho Razor và "sử dụng phiên bản 5 thay vì 4" cho MVC, sau đó đóng VS, xóa bộ nhớ cache và mở dự án và xây dựng lại. Sau đó, mọi thứ đã được khắc phục. Dưới đây là hướng dẫn chi tiết hơn.
Đây là chuỗi các thay đổi đã giúp tôi khắc phục sự cố của mình:
- Trong thư mục "Lượt xem" Web.config, thay đổi tất cả các vị trí nơi
- Phiên bản MVC được đặt thành 4.0.0.0 đến 5.0.0.0
- Phiên bản Razor được đặt thành 2.0.0.0 đến 3.0.0.0
Đây là những dòng trong trường hợp của tôi:
<sectionGroup name="system.web.webPages.razor" type="... Version=3.0.0.0 ...">
<section name="host" type="... Version=3.0.0.0 ..." .../>
<section name="pages" type="... Version=3.0.0.0 ..." .../>
</sectionGroup>
...
<host factoryType="... System.Web.Mvc, Version=5.0.0.0 ..." />
...
<pages
...
pageParserFilterType="... Version=5.0.0.0 ..."
pageBaseType="... Version=5.0.0.0 ..."
userControlBaseType="... Version=5.0.0.0 ...">
<controls>
<add assembly="... Version=5.0.0.0 ..." ... />
</controls>
</pages>
(lưu ý: 1) các phiên bản của bạn có thể khác nhau, tôi chỉ nói những gì cần thiết phải làm trong trường hợp của tôi 2) Tôi đã bỏ qua một số nội dung với "..." cho ngắn gọn 3) ngay cả khi bạn có phiên bản MVC giống như 5.3.2.0 bạn vẫn nên nhập 5.0.0.0, giống với phiên bản của Razor - nhập tất cả các số không trong 3.0.0.0)
Trong tệp cấu hình chính (tệp ở cấp cao nhất) thay đổi webPages:version
từ 2.0.0.0 thành 3.0.0.0.
Thay đổi này có thể không ảnh hưởng đến giải pháp nhưng tôi vẫn sẽ đề cập đến nó. Đảm bảo rằng <namespaces>
phần của thư mục "Chế độ xem" có cùng nội dung với tệp .conifg chính ở gốc của dự án, giống như:
<namespaces>
<add namespace="System.Web.Helpers" />
<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" />
<add namespace="System.Web.WebPages" />
</namespaces>
- Cuối cùng, đóng VS. Xóa tất cả các tệp bộ nhớ cache trong
%LOCALAPPDATA%\Microsoft\VisualStudio\14.0\ComponentModelCache
(hoặc bất kỳ đường dẫn chính xác nào của bạn) giống như nó được đề xuất trong (hiện tại) câu trả lời được chấp nhận bởi Fenton. Cũng xóa .scan
tệp, ngay cả khi nó không được đề cập trong câu trả lời đó. Sau khi hoàn tất, hãy mở VS, Làm sạch dự án của bạn và Xây dựng lại nó. Mọi thứ sẽ hoạt động ngay bây giờ. Nó đã làm việc cho tôi.