Lỗi "Thiếu thành viên yêu cầu trình biên dịch" được đưa ra nhiều lần mà hầu như không có thay đổi nào đối với mã


94

Hôm nay sau khi triển khai một số thay đổi đối với trang C # MVC mà tôi chạy, tôi đã quay lại để thực hiện thêm một số sửa đổi và gặp lỗi này:

Thiếu thành viên cần có trình biên dịch System.Runtime.CompilerServices.ExtensionAttribute..ctor

Lỗi này hơi mơ hồ (rõ ràng là ngoài phần mô tả) vì nó không cung cấp cho tôi tệp, dòng hoặc cột để tham chiếu, chỉ có dự án. Ngoài ra, nó ném lỗi tổng cộng 20 lần. Tôi chỉ thực hiện ba thay đổi đối với mã giữa thời điểm tôi triển khai (nó hoàn toàn hoạt động vào thời điểm đó) và bây giờ. Tôi đã hoàn nguyên các thay đổi của mình và nó vẫn gặp lỗi tương tự, điều này không có ý nghĩa gì đối với tôi.

Tôi chưa tìm được nhiều thông tin về lỗi này trên SO hoặc Google, trừ kẻ này giải pháp và một vài tài liệu tham khảo đối với một số lỗi dự án Mono (tôi không sử dụng Mono). Giải pháp mà anh chàng ở trên đưa ra yêu cầu thêm một định nghĩa lớp sẽ cho phép trình biên dịch phân giải tham chiếu. Tôi đặc biệt không muốn làm điều này vì tôi chưa cần phải làm điều đó cho đến thời điểm này và nó sẽ chỉ làm hỏng mã của tôi.

Chỉ tò mò nếu có ai đã chạy qua điều này trước đây. Cảm ơn trước!


1
Có vẻ như bạn đang sử dụng trình biên dịch C # 3.0 nhưng biên dịch dựa trên .NET Framework 2.0. Kiểm tra tham chiếu lắp ráp của bạn.
dtb

Câu trả lời:


27

Lỗi này thường có nghĩa là dự án của bạn đang biên dịch dựa trên .NET 2.0 hoặc bạn không tham chiếu đến phiên bản chính xác của System.Core.dll

Đối với một câu hỏi gần trùng lặp, hãy xem Lỗi khi sử dụng các phương thức mở rộng trong C #


Hóa ra là tôi có một tham chiếu không hợp lệ từ một hội đồng mà tôi không còn sử dụng nữa (Azure). Tôi không nghĩ rằng hợp ngữ Azure được biên dịch dựa trên .Net 2.0 nhưng việc xóa nó đã khắc phục sự cố. Tôi không chắc tại sao điều này lại xuất hiện một cách ngẫu nhiên vì tôi đã không chạm vào bất kỳ thứ gì liên quan đến các hội đồng hoặc phiên bản .Net (4.0) của mình trong một thời gian khá dài. Chao ôi, cảm ơn vì đã chỉ cho tôi đi đúng hướng.
jamesmillerio

Unity3D đặt trình biên dịch thành .NET 2 theo mặc định (tại thời điểm viết bài). Trong cài đặt trình phát, hãy thay đổi nó thành phiên bản.NET mới hơn để khắc phục sự cố này.
Shadow

230

Trong trường hợp của tôi, đó là vì dự án không được tham chiếu Microsoft.CSharp. Sau khi tôi thêm một tham chiếu đến assembly đó, nó được biên dịch tốt.


3
Đã giải quyết vấn đề.
Anton Lyhin

16
Vấn đề của tôi là trong một Bài kiểm tra đơn vị sử dụng đối tượng động và Expando. Tham chiếu Microsoft.CSharp là một mẹo. Cảm ơn!
realPT

1
Tôi đã có kiểu động NewtonSoft, v.v. Trong thư viện .NetStandard Class: `` `string weatherjson = await GetAsync (url); động obj = JsonConvert.DeserializeObject (weatherjson); động temp = obj.main.temp; `` Tôi đã tìm kiếm Nuget cho Microsoft.CSharp và cài đặt nó. Thư viện hiện đang được xây dựng :) Q. Tôi có thể sử dụng thư viện .NetStandard này trong ứng dụng Linux, với tham chiếu Microsofct không?
David Jones

Cảm ơn bạn! Vì lý do nào đó mà tôi không thấy rõ điều này từ tin nhắn! Tôi đang điều chỉnh một dự án được viết từ lâu và nội dung tham khảo này thật đáng sợ. Khiến người ta đánh giá cao sự rõ ràng tương đối của Java mà tôi thường sử dụng.
Tuntable

82

Tôi không biết có ai khác đã gặp phải lỗi này hay không, nhưng tôi bất ngờ gặp lỗi này sau khi thêm một số dynamicloại sử dụng mã và kết hợp WebAPI vào một dự án có nguồn gốc là ứng dụng TypeScript trong VS2013. Chỉ cần thêm một tham chiếu đến Microsoft.CSharp đã giải quyết được sự cố của tôi.

Hy vọng điều này sẽ giúp người khác.


3
Đây chính xác là vấn đề của tôi. Thêm vào động phá án một cách bí ẩn.
SouthShoreAK

2
Tương tự đối với tôi, sử dụng năng động với .NetStandard2.0, tôi phải cài đặt C # NuGet cho nó để biên dịch
Mahmoud Hanafy

17

Tôi cũng gặp phải tình huống này ngày hôm nay. Trong trường hợp của tôi, tôi đang tham chiếu dll Newton.Json.Net v3.5 trong ứng dụng .NET 4.0 của mình. Tôi nhận ra rằng tôi thậm chí không sử dụng thư viện này, do đó khi tôi xóa nó khỏi tài liệu tham khảo của mình, nó không còn gây ra lỗi trình biên dịch cho tôi nữa.

Vấn đề đã được giải quyết !!!


2
Tương tự đối với tôi, dll Newton.Json.Net đã gây ra vấn đề!
Julien Pierre

Trong trường hợp của tôi, lý do là phiên bản NET20 của Microsoft's AntiXSSLibrary.dll sai. Đã thay thế bằng NET35 - hết lỗi.
Denis

7

Lỗi thực sự xuất phát từ thực tế là lắp ráp 2.0 của bạn gây ra lỗi chứa mã này:

namespace System.Runtime.CompilerServices
{
    public class ExtensionAttribute : Attribute { }
}

Đoạn mã trên cho phép .NET 2.0 Assembly sử dụng các phương thức mở rộng (xem Sử dụng các phương thức mở rộng trong .NET 2.0? ). Mặc dù nó gây nhầm lẫn cho trình biên dịch nếu bạn nhắm mục tiêu .NET 4.0 và tham chiếu một Assembly 2.0 (chứa mã ở trên) như mscorlib.dll (4.0) chứa cùng một lớp trong cùng một không gian tên.

Tôi đã sửa cái này

  • bằng cách biên dịch lại cụm 2.0 ban đầu mà không có thuộc tính nhắm mục tiêu 4.0
  • bằng cách tháo lắp ráp (rõ ràng)
  • bằng cách thêm Thuộc tính tiện ích mở rộng thứ ba trong mục tiêu mà bạn biên dịch (dường như nó làm thay đổi các định nghĩa được tham chiếu)

Đây chính xác là vấn đề của tôi, tôi sẽ thử hướng dẫn của bạn và đăng lại.
John Peters

6

Viết mã này ở đâu đó trong dự án của bạn có thể giải quyết vấn đề của bạn. Nó phù hợp với tôi

namespace System.Runtime.CompilerServices
{
    public class ExtensionAttribute : Attribute { }
}

nơi bạn viết mã này? bạn đã tạo một lớp trong thư mục gốc của dự án?
Alex

1
@Alex Tôi đã thêm một lớp có tên là CompilerService vào thư mục gốc của dự án của tôi với mã trên đó và nó đã hoạt động. Đẹp!
Halvard

4

NLog.dll 2.0 được tham chiếu từ dự án .NET 4.0 cũng có thể gây ra điều này.


NLog cho .NET 2.0, được tham chiếu từ .NET 3.5 dường như đưa ra các lỗi tương tự.
Pedro

3

Có thể bạn sử dụng dynamictừ khóa Trong dự án thư viện Lớp .NetStandard. Nếu vậy, bạn cần thêm tham chiếu đến Microsoft.CSharpthư viện trong dự án. Hy vọng nó sẽ giải quyết vấn đề của bạn.


2

Tôi không có giải pháp chính xác, nhưng tôi sẽ thêm điểm dữ liệu của mình:

Trong trường hợp của tôi, lỗi là do tham chiếu GoogleSearchAPINet20

Đây là những gì sẽ xảy ra:

  • Tôi đóng giải pháp xây dựng
  • Tôi mở giải pháp một lần nữa. Nó vẫn xây dựng
  • Ngay sau khi tôi thực hiện bất kỳ thay đổi nào và cố gắng xây dựng, tôi nhận được 19 lỗi "Thiếu thành viên trình biên dịch cần thiết ..."
  • Tôi xóa tham chiếu đến GoogleSearchAPINet20
  • Tôi thêm lại tham chiếu vào GoogleSearchAPINet20
  • Tôi xây dựng giải pháp. Nó xây dựng không có lỗi
  • Bây giờ tôi có thể thực hiện thay đổi mã, xây dựng hoặc thực hiện bất kỳ hành động nào khác với giải pháp một cách chính xác miễn là Visual Studio của tôi đang mở
  • Tôi đóng Visual Studio
  • Lặp lại từ bước một

Tôi không tham khảo System.Core.dll trong giải pháp của mình và khung mục tiêu của tôi là .NET 4.

Tôi hơi khó chịu ở điểm này ...


1

Gặp lỗi này khi cố gắng sử dụng Tác vụ không đồng bộ với .NET 4.0. Cập nhật Khung mục tiêu lên 4.5.2 đã khắc phục sự cố.


1

Tôi đã nhấn cùng một tập hợp các ngoại lệ sau khi tôi thêm một số phương thức không đồng bộ vào một dự án winforms. Tôi cần chuyển phiên bản .NET của mình từ 4 lên 4.5


0

Đối với tôi, sự cố xảy ra khi tôi thêm phương thức không đồng bộ với Tác vụ không đồng bộ đang chờ đợi trong dự án .net4.0 của tôi!

Với các phiên bản trước của .NET-Framework 4.5, bạn phải cài đặt gói này:

Install-package Microsoft.Bcl.Async pre

hoặc là

Install-Package Microsoft.CompilerServices.AsyncTargetingPack

thêm thông tin về Nuget hoặc Nuget

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.