Kiểu 'Biểu thức <>' được xác định trong một hợp ngữ không được tham chiếu


84

Trong khung ASP.NET MVC 4.5.2.

sau khi đánh máy

@Html.LabelFor()
or 
@Html.EditorFor()

trong tầm nhìn

Tôi đang gặp lỗi: Loại 'Biểu thức <>' được xác định trong một hội đồng không được tham chiếu. Bạn phải thêm một tham chiếu vào hội ngữ "System.Core, Version = 4.0.0.0, Văn hóa = trung lập, PublicKeyToken = b77a5c561934e089".

Tôi đã thêm tham chiếu lắp ráp System.Core.dll, Phiên bản 4.0.0.0, Phiên bản Runtime v4.0.30319. và tôi cũng đã làm trong web.config


Câu trả lời:


41

Tôi đã gặp vấn đề tương tự như bạn, mặc dù muộn hơn nhiều. Vấn đề là tôi không thể truy cập các chế độ xem Razor (.cshtml) vì tôi gặp lỗi thông báo rằng tôi thiếu tham chiếu lắp ráp, cụ thể là System.Web.Mvc, mặc dù nó nằm trong tham chiếu dự án. Sau khi điều tra, tôi nhận thấy rằng phiên bản NuGet đã cài đặt là 5.2.3, trong khi dự án yêu cầu 5.2.0. Giải pháp là hạ cấp phiên bản MVC.

  1. Đi tới Project-> NuGet Package Manager.
  2. Tìm kiếm MVC; nó sẽ là kết quả đầu tiên.
  3. Tiếp theo là chọn hạ cấp từ menu thả xuống trong chi tiết của gói NuGet và gửi.

Xác nhận tất cả các hộp thoại và bạn đã sẵn sàng.


14
Làm thế nào bạn nhận thấy dự án của bạn yêu cầu 5.2.0?
Vanice

3
@Vanice Tôi nghĩ rằng nó phụ thuộc vào phiên bản .NET Framework: .NET 4.5.2 -> MVC 4.0.0; .NET 4.6.0 -> MVC 5.2.0; .NET 4.6.1 -> MVC 5.2.3. (Không được xác nhận)
JoaoRibeiro

9
Tôi đang sử dụng .net 4.7 và vẫn có lỗi này gây phiền nhiễu
Sven

1
Tôi đã gặp vấn đề tương tự, hóa ra đó là giá trị gỡ lỗi của tôi trong web.config được đặt thành sai. Đặt nó là "True" <compilation debug = "true" targetFramework = "4.5" /> <httpRuntime targetFramework = "4.5" />
mlaribi

Tôi đã thử giải pháp trên của nó hoạt động tốt. My VS Solution Version là của 4.6.2 và tôi hạ MVC để 5.2.3 từ 5.2.4 Vì vậy, tôi đến để biết rằng MVC 5.2.3 tương thích với Net 4.6.2
Ibrahim Inam

58

Tôi không chắc liệu bạn có còn gặp sự cố này hay không nhưng tôi cũng gặp phải vấn đề tương tự.

Tôi đã có thể tìm thấy các giải pháp ở đây

/programming/6496223/compilation-error-in-net-4-0-web-config-linq-not-found

<add assembly="System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>

<add assembly="System.Data.DataSetExtensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>

<add assembly="System.Xml.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>

Tôi hi vọng cái này giúp được..


tôi đã nói điều đó rồi .. tôi đã thử cái này trước khi tôi đăng câu hỏi này. bất cứ cách nào cảm ơn cả hai bạn
mansoor

1
khỏe! Nó hoạt động. Lưu ý bạn nên đóng và mở lại tệp cshtml để tệp có hiệu lực.
Mahdi Ataollahi

Điều này đã hiệu quả với tôi khi tôi xem qua tất cả web.configs và đảm bảo các phiên bản khớp với nhau như trong stackoverflow.com/a/37381294/8684119
AMG

Nó hoạt động, nhưng tôi thấy giải pháp này hơi bẩn. Dù sao, trong trường hợp của tôi, tôi chỉ thêm tham chiếu đến System.Core
T-moty

45

Lỗi này có nghĩa là Visual Studio không thể xác định vị trí lắp ráp System.Web.Mvc để cấp nguồn intellisense cho chế độ xem Razor. Có thể yêu cầu một hoặc cả hai điều sau để khắc phục.

  1. Đảm bảo phiên bản của khuôn khổ .NET cho thuộc tính biên dịch trong web.config chính (phiên bản trong thư mục gốc của trang web) giống với phiên bản được chỉ định trong thuộc tính dự án.

[root] /Web.config:

<system.web>
    <compilation targetFramework="4.6" />

Thuộc tính dự án:

Thuộc tính dự án

  1. Đảm bảo phiên bản của assembly MVC được chỉ định trong view web.config (phiên bản trong thư mục view) giống với phiên bản MVC mà bạn đang sử dụng trong dự án của mình.

[xem thư mục] /web.config:

<system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

Thuộc tính tham chiếu hợp ngữ MVC:

Phiên bản MVC


3
Điều này làm việc cho tôi. Cảm ơn nhiều.
vibs2006

1
Điều này cũng giải quyết nó cho tôi, nhưng không trực tiếp. Tôi đã phải xóa tệp có phiên bản sai khỏi thư mục bin của mình, cập nhật mvc qua nuget và sau đó nó đã đặt phiên bản chính xác vào thư mục bin của tôi và nó hoạt động. nếu bạn vẫn tiếp tục nhận được phiên bản sai trong thư mục bin sau khi cập nhật thông qua NuGet, xóa một tồn tại trong thư mục bin
Joshua K

Cảm ơn bạn. Tôi đã cập nhật Microsoft.AspNet.Mvc thông qua NuGet lên v5.2.7 và bắt đầu thấy lỗi này trong tệp .schtml, trong khi ứng dụng vẫn đang hoạt động. Hóa ra web.config trong thư mục Views dưới <system.web.webPages.razor> nó vẫn là v5.2.3. Đã giúp sửa đổi nó thành v5.2.7.
vkelman

Điều này đã hiệu quả - cảm ơn bạn! Nhớ kiểm tra [Lượt xem] /web.config là chìa khóa cho tôi. Phiên bản phù hợp với mọi nơi khác nhưng ở đó!
Jay Dawkins

21
  • Đóng tệp cshtml
  • Giải pháp xây dựng lại
  • Mở tệp cshtml
  • Vẫn còn lỗi? Khởi động lại Visual studio
  • Vẫn còn lỗi? Sử dụng câu trả lời của ctm1988

Tôi đã thử tất cả mọi thứ đã được đề cập ở đây ... nhưng vẫn nó không làm việc .. trong khi cài đặt lại visual studio tác phẩm của mình một cách hoàn hảo .. tôi nghĩ thiếu phụ thuộc là lý do ..
Mansoor

Nếu bạn có một dự án đang hoạt động tốt và đột nhiên bạn gặp sự cố này thì đây có thể là cách khắc phục!
Simon_Weaver

Tôi không thể tin rằng điều này thường hoạt động như thế nào
nmit026

16

Tôi đã thử hầu hết những cách này, những gì cuối cùng làm việc cho tôi là dỡ bỏ dự án, chỉnh sửa tệp csproj và thêm những thứ sau:

<Reference Include="System.Core" />

https://stackoverflow.com/a/38371981/2335660


2
nó hoạt động! có vẻ như người học trực quan nghĩ rằng System.Core đã được thêm vào nhưng thực sự thì không. Vì vậy, bạn cần thực hiện việc này theo cách thủ công
isxaker

10

Xóa tệp [projectName] .csproj.user khỏi thư mục dự án đã giúp ích cho tôi.


Làm việc cho tôi Vs 2017 Asp MVC5
Speuline

2
Cái này đã hoạt động, VS 2019 & MVC5. Tôi cũng đã dọn sạch các thư mục bin / obj và .vs.
Lean

7

Tôi vừa gặp vấn đề chính xác tương tự và không có giải pháp nào khắc phục được sự cố. Tôi đã phải thêm điều này vào web.configbên trong của tôiSystem.Web

<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" />

Tôi đã loại bỏ nó khi thay đổi một số thứ configxung quanh.


xin vui lòng thêm thẻ với bất kỳ công nghệ trở lên .. Không có thẻ nào Tìm thấy
Vikrant Kashyap

Việc thêm thuộc tính compilation / targetFramework phù hợp với tôi.
Tom Bowers

Tôi đã vô tình thêm hai giá trị khác nhau cho khung mục tiêu, điều này đã giải quyết được vấn đề của tôi.
Geethanga

Điều này đã khắc phục sự cố cho tôi, một ứng dụng asp.net/webforms lai: Tôi đã nâng cấp khung mục tiêu của ứng dụng của mình lên 4.7, không nhận thấy hai cài đặt web.config này vẫn trỏ đến 4.5.
Tom Regan

cùng một vấn đề được giải quyết bằng câu trả lời này vào ngày 4.8
Mamdouh

4

Trong trường hợp của tôi, thông báo này chỉ được hiển thị khi bật Resharper. Tôi đã xóa bộ nhớ cache của Resharper, khởi động lại VS, tắt Resharper và bật lại. Tin nhắn đã tan biến.


1
Trong trường hợp của tôi, chỉ cần đóng và khởi động lại VS. Tôi có bộ sạc lại nhưng không cần phải làm gì với nó.
JayJay

3

Tôi đã gặp vấn đề tương tự với việc thiếu lắp ráp và đã xảy ra rằng bản dựng VS2017 đã không sao chép nó đúng cách vào thư mục Bin. Các bước này đã giúp tôi:

  • Điều hướng đến nút Tham chiếu của dự án web
  • Tìm tham chiếu đến System.Core
  • Mở Cửa sổ Thuộc tính VS
  • Trong cửa sổ thuộc tính, thay đổi Copy Local: False thành True

từ nhận xét này: CS0012: Kiểu '##### Kiểu bất kỳ #####' được định nghĩa trong một hợp ngữ không được tham chiếu


Mặc dù liên kết này có thể trả lời câu hỏi, nhưng tốt hơn hết bạn nên đưa các phần thiết yếu của câu trả lời vào đây và cung cấp liên kết để tham khảo. Các câu trả lời chỉ có liên kết có thể trở nên không hợp lệ nếu trang được liên kết thay đổi. - Từ đánh giá
Steve Gomez

1
@SteveG. Cảm ơn, Steve! Tôi đã chỉnh sửa nó. Chưa nhận xét nhiều trước đây và thiếu một số nghi thức SO ... :-)
Angel_D

1
Cái này đã giải quyết được vấn đề của tôi, tôi phải đề cập rằng Visual Studio Restart cũng cần thiết, Cảm ơn bạn.
Saeed Mousavi

3

Trong Web.config, tôi cần thay đổi:

  <system.web>
    <compilation debug="true" targetFramework="4.7">

đến

  <system.web>
    <httpRuntime targetFramework="4.7" />
    <compilation debug="true" targetFramework="4.7">

1
Cảm ơn bạn, @juFo! Đây cố định nó cho tôi trong Visual Studio 2019 với khuôn khổ mục tiêu MVC 5. My MVC dự án là 4.7.2 trong khi web.config vẫn có 4.7.1 cho targetFrameworktrong <httpRuntime><compilation>thẻ. Chỉ cần cập nhật thuộc tính để phản ánh chính xác phiên bản .NET Framework của dự án đã sửa lỗi đó cho tôi.
iCode

2

Kiểm tra xem tệp cshtml Xây dựng Hành động có được đặt thành 'Nội dung' không.

Tôi sử dụng ReSharper và nhận thấy rằng vì lý do nào đó mà tệp được tạo mặc định là 'Không có' khi gọi mẫu.


2

Thêm phần sau vào Web.config (trong thư mục gốc). Tôi đã thử hoàn toàn mọi thứ của các đề xuất trước đó và không có gì hiệu quả cho đến khi tôi tìm thấy bên dưới. Hy vọng nó sẽ tiết kiệm thời gian cho người khác.

Tôi sử dụng targetFramework = "4.6.1", nhưng hãy thay đổi nó thành phiên bản bạn sử dụng nếu khác.

<system.web>
   <compilation debug="true" targetFramework="4.6.1" />
   <httpRuntime targetFramework="4.6.1" />
</system.web>

2

Thêm tệp System.Core.dll vào thư mục bin theo cách thủ công. Khởi động lại VS và xây dựng dự án . Giải quyết cho tôi

Có lỗi thiết kế trong tất cả các chế độ xem trên trình trợ giúp @Html và trên lưới Kendo của tôi.

Việc thêm lắp ráp System.Core trong Web.config không làm gì cả, cũng không hạ cấp phiên bản MVC. Và lỗi khi cố gắng thêm tham chiếu vào System.Core theo cách thủ công:

Không thể thêm tham chiếu đến 'System.Core'. Thành phần này đã được tham chiếu tự động bởi hệ thống xây dựng.

Đảm bảo kiểm tra xem TargetFramework trong thuộc tính dự án có khớp với thuộc tính dự án web.config không.

Ảnh chụp màn hình của thư mục bin


1

Đối với tôi, có một tùy chọn trong menu dự án để "Kích hoạt C # 6.0 / VB 14". Chọn tùy chọn này đã thực hiện thủ thuật. Trước đây, tôi đã thử sửa đổi web.config, khởi động lại Visual Studio, v.v. như được đề xuất trong bài đăng này.


1

Tôi phải đối mặt với cùng một vấn đề. Về cơ bản, vấn đề là sử dụng phiên bản khác nhau của System.Web.Mvc. Vì vậy, điều tốt nhất bạn nên mở Tools > Nuget Package Manager > Manage Nuget Packages for Solution. Bạn có thể thấy System.Web.Mvctrên Cosolidatetab. Nâng cấp hoặc hạ cấp sẽ là lựa chọn tốt nhất. Nếu bạn sử dụng .Net framework mới nhất hiện tại .Net 4.6.1, bạn nên nâng cấp tất cả các System.Web.Mvcphiên bản lên 5.2.4.0. Chúc may mắn!


Tôi có 12 gói cần được nâng cấp và sln chạy mà không gặp bất kỳ sự cố nào khi tôi cập nhật mọi thứ. Cảm ơn bạn.
Jamie

1

Vâng, tôi đã sửa nó bằng cách sửa tham chiếu lắp ráp trong /Views/web.config , hãy xem hình ảnh:

nhập mô tả hình ảnh ở đây


1

xóa thư mục bin, .vs và obj. sau khi xây dựng dự án của bạn trên studio trực quan.


Tôi thực hiện rất nhiều chuyển đổi giữa các phiên bản trong dự án của mình, một số ít nhắm mục tiêu đến các khuôn khổ khác nhau. Điều này đã xử lý lỗi tham chiếu "System.Core" của tôi. Cảm ơn bạn đã nhắc nhở đơn giản rằng đôi khi cần phải dọn dẹp môi trường VS giữa các lần thanh toán.
Suncat2000

0

Điều này xảy ra với một trong những quan điểm của tôi - tất cả những quan điểm khác đều ổn. Tôi đã làm như sau:

  • Tạo một chế độ xem mới
  • Sao chép và dán nội dung từ chế độ xem cũ sang chế độ xem mới
  • Đã xóa cái cũ
  • Đổi tên cái mới thành cái cũ

0

Khởi động lại Visual studio đã làm việc cho tôi.


Điều này đã xảy ra với tôi sau một số cập nhật NuGet dường như vô tội. Nó chỉ là các thư viện như jQuery và bootstrap. Sau khi cập nhật, tôi nhận được thông báo lỗi này và việc khởi động lại Visual Studio đã sửa nó.
Steve Hiner

0
  • Đóng tệp
  • Làm sạch dung dịch
  • Xây dựng giải pháp
  • Mở lại tệp

0

Cố gắng thêm

using system.Linq.Expressions;


4
Mặc dù đoạn mã này có thể giải quyết câu hỏi, bao gồm một lời giải thích thực sự giúp cải thiện chất lượng bài đăng của bạn. Hãy nhớ rằng bạn đang trả lời câu hỏi cho người đọc trong tương lai và những người đó có thể không biết lý do cho đề xuất mã của bạn.
Farkie

0

Tôi cũng có vấn đề này. Thay đổi targetFramework="4.5.2"thành targetFramwork="4.5" tệp web.config đã giải quyết được vấn đề này.


0

Nếu bạn chỉ nhận được điều này trong một hoặc hai tệp CSHTML ... thì đó là một tệp bị hỏng.

Tôi đã gặp trường hợp này với một tệp bị hỏng có một số ký tự unicode ẩn. Hãy thử sao chép tất cả văn bản của tài liệu vào một phiên bản notepad mới. Xóa nội dung của tệp gốc và lưu ... nếu độ dài tệp> 0, có điều gì đó không ổn.

Xóa tệp và lưu phiên bản notepad của bạn trên phiên bản cũ. Tất cả các lỗi đã biến đi cho tôi.

Tôi đã có một vài lần điều này xảy ra trong giải pháp của mình. Không chắc điều gì gây ra nó, nhưng tôi nghi ngờ là Resharper đã bị trục trặc khi nó bắt đầu nuốt những khối bộ nhớ khổng lồ vào vực thẳm.

Tôi có phải là người duy nhất có mối quan hệ yêu / ghét với Resharper?


0

Điều này có thể gây ra nếu bạn có nhiều dự án trong giải pháp của mình mà không phải tất cả đều nhắm mục tiêu đến cùng một phiên bản .NET Framework. Ví dụ: nếu dự án ứng dụng web của bạn nhắm mục tiêu .NET 4.5 và bạn có tham chiếu lắp ráp đến một dự án khác trong giải pháp nhắm mục tiêu .NET 4.5.2. Để khắc phục điều này, bạn cần thay đổi các dự án của mình thành tất cả đều nhắm mục tiêu đến cùng một phiên bản .NET Framework.


0

Nếu không có câu trả lời nào hiệu quả, hãy sử dụng câu trả lời này. Tôi phải đối mặt với cùng một vấn đề! Trên thực tế, tệp cấu hình.cs trong thư mục di chuyển bị thiếu / bị xóa. Tôi đã xóa thư mục di chuyển và cũng đã xóa bảng di chuyển khỏi cơ sở dữ liệu. Tiếp theo trong Bảng điều khiển Trình quản lý Gói (PM) đã sử dụng các lệnh sau:

Enable-Migrations -Force
Add-Migration Initial
update-database

Quá trình này đã tạo lại tệp cấu hình.cs và mọi thứ hoạt động hoàn hảo!


0

Kiểm tra các thuộc tính dự án của bạn để lấy khung Target. Tôi đã giải quyết vấn đề này trong dự án của mình bằng cách đối sánh với khuôn khổ mục tiêu của tôi. Khuôn khổ mục tiêu của mình. Khuôn khổ .NET 4.6.1 MVC 5.2.3 là giải pháp phù hợp. Tôi đã nhận phiên bản MVC đó từ NuGet.


0

Trong trường hợp của tôi, giải pháp là di chuyển ConnectionString bên trong Web.Config. Câu lệnh này phải nằm sau phần AppSettings.


0

Tôi đã làm TẤT CẢ những điều trên và cuối cùng nhận thấy rằng điều giải quyết được vấn đề đó cho tôi (trên trang web .net framework 4.7.1 với MVC 5.2.4) là thêm điều này vào web.config gốc trong <compilation>-

<assemblies>
  <add assembly="System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
</assemblies>
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.