Không thể tìm thấy một hoặc nhiều loại để biên dịch biểu thức động. Bạn có thiếu tài liệu tham khảo đến Microsoft.CSharp.dll và System.Core.dll không?


287

Tôi đang cố gắng biên dịch mã này trong Microsoft Visual C # 2010

using System;
using System.Globalization;


class main
{
    static void Main()
    {

        dynamic d;
        d = "dyna";
        Console.WriteLine(d);    
    }
}

nhưng tôi nhận được hai lỗi này

Lỗi 1 Loại được xác định trước 'Microsoft.CSharp.R nbBinder.Binder' không được xác định hoặc nhập

Lỗi 2 Không thể tìm thấy một hoặc nhiều loại để biên dịch biểu thức động. Bạn có thiếu tài liệu tham khảo đến Microsoft.CSharp.dll và System.Core.dll không?

Tôi đã đọc bài đăng này nhưng tôi chưa quen với C # và tôi không thể hiểu vấn đề thực sự là gì. Đặc biệt là những gì và ở đâu được gọi là .configcác tập tin ..


25
Kiểm tra tài liệu tham khảo của bạn. Nhấp chuột phải và "Thêm tài liệu tham khảo .." Tìm kiếm "Microsoft.CSharp.dll" và thêm nó. Thông thường System.Core.dll đạt tiêu chuẩn khi bạn tạo một dự án mới, không chắc chắn về CSharp.dll
Internet

Câu trả lời:


586

Trên cửa sổ giải pháp thám hiểm của bạn, nhấp chuột phải vào Tài liệu tham khảo, chọn Thêm tham chiếu, chuyển đến tab .NET, tìm và thêm Microsoft.CSharp.


26
Của tôi đã được tham chiếu nhưng tôi vẫn có lỗi này. Tôi đã tạo một ứng dụng ASP.Net MVC4 mới trong VS 2010. Bối rối, tôi gỡ bỏ và cài đặt lại, và lỗi đã biến mất. Làm sạch / Xây dựng lại không giúp được gì.
Paul

@Paul: Điều tương tự cũng xảy ra với tôi sau khi nâng cấp một dự án từ 4.0 lên 4.5. Phiên bản # / etc giống nhau giữa 4.0 / 4.5 IIRC có thể là lý do.
Steven Evers

13
Nhóm Visual Studio nên thực sự suy nghĩ về việc cho phép mọi người di chuột đến lỗi và sau đó chọn "Thêm Microsoft.CSharp vào tài liệu tham khảo"
geoyws

8
@Geoyws Một từ: ReSharper.
dùng2864740

2
@ user2864740 Thông thường Resharper thực hiện việc này. Nhưng trong trường hợp này, ReSharper sẽ không hiển thị bất cứ điều gì.
Pulle

21

Hãy chắc chắn rằng dự án của bạn đang nhắm mục tiêu .NET framework 4.0. Visual Studio 2010 cũng hỗ trợ mục tiêu khung công tác .NET 3.5, nhưng .NET 3.5 không hỗ trợ dynamictừ khóa.

Bạn có thể điều chỉnh phiên bản khung trong thuộc tính dự án. Xem http://msdn.microsoft.com/en-us/l Library / bb398202.aspx để biết thêm.


7

Tôi gặp vấn đề tương tự ngoại trừ việc xóa và thêm tham chiếu trở lại không khắc phục được lỗi, vì vậy tôi đã thay đổi phiên bản .Net từ 4.5sang 4.5.1.

Để đạt được điều này, hãy vào web.configtập tin của bạn và thay đổi các dòng sau

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

đến đây

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

và xây dựng lại.


6

Các dòng màu đỏ dưới ViewBag là đau đầu của tôi trong 3 tháng). Chỉ cần xóa tham chiếu Microsoft.CSharp khỏi dự án và sau đó thêm lại.


3
điều này không hiệu quả với tôi ngay cả khi tôi cũng có các dòng màu đỏ trong dòng ViewBag của mình
knocte

1

Tôi đã có cùng một vấn đề và giải quyết nó bằng cách xóa tham chiếu "Microsoft.CSharp" khỏi dự án và sau đó thêm lại.


1

Đối với tôi, việc xóa và thêm lại một tham chiếu đến Microsoft.CSharp đã khắc phục sự cố tạm thời cho đến khi tệp bị ảnh hưởng được chỉnh sửa. Đóng Visual Studio và mở lại dự án đã cố định lâu hơn, vì vậy đó là một lựa chọn nếu tình huống này xảy ra trong khi Microsoft.CSharp đã được tham chiếu.

Có thể khởi động lại IDE như một bước đầu tiên có vẻ tầm thường, nhưng đây là một lời nhắc nhở cho những người như tôi, những người không nghĩ đó là điều đầu tiên phải làm.


0

Không ai trong số này làm việc cho tôi.

Các thư viện lớp của tôi chắc chắn đã tham khảo cả System.Core và Microsoft.CSharp. Ứng dụng web là 4.0 và không thể nâng cấp lên 4.5 do các vấn đề hỗ trợ.

Tôi đã gặp phải lỗi khi biên dịch mẫu dao cạo bằng Công cụ Dao cạo và chỉ gặp phải nó không liên tục, giống như sau khi ứng dụng web được khởi động lại.

Giải pháp hiệu quả với tôi là tải thủ công lắp ráp sau đó thử lại thao tác tương tự ...

        bool retry = true;
        while (retry)
        {
            try
            {
                string textTemplate = File.ReadAllText(templatePath);
                Razor.CompileWithAnonymous(textTemplate, templateFileName);
                retry = false;
            }
            catch (TemplateCompilationException ex)
            {
                LogTemplateException(templatePath, ex);
                retry = false;

                if (ex.Errors.Any(e  => e.ErrorNumber == "CS1969"))
                {
                    try
                    {
                        _logger.InfoFormat("Attempting to manually load the Microsoft.CSharp.RuntimeBinder.Binder");
                        Assembly csharp = Assembly.Load("Microsoft.CSharp, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a");
                        Type type = csharp.GetType("Microsoft.CSharp.RuntimeBinder.Binder");
                        retry = true;
                    }
                    catch(Exception exLoad)
                    {
                        _logger.Error("Failed to manually load runtime binder", exLoad);
                    }
                }

                if (!retry)
                    throw;
            }
        }

Hy vọng điều này có thể giúp đỡ người khác ngoài đó.


-2

Nếu bạn bỏ lỡ, Microsoft.CSharp.dll lỗi này có thể xảy ra. Kiểm tra bạn tham khảo dự án.


3
Chào mừng bạn đến với Stack Overflow! Bạn có thể muốn bao gồm một mẫu mã hoặc nhiều hơn một lời giải thích. Điều này có vẻ giống như một bình luận,
Gary Storey

5
Về cơ bản, bạn đã nói điều tương tự như trong câu trả lời được chấp nhận đưa ra 3 năm trước.
Ilya Luzyanin
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.