ไม่พบประเภทอย่างน้อยหนึ่งรายการที่จำเป็นในการรวบรวมนิพจน์แบบไดนามิก คุณไม่มีการอ้างอิงถึง Microsoft.CSharp.dll และ System.Core.dll?


287

ฉันพยายามรวบรวมรหัสนี้ใน Microsoft Visual C # 2010

using System;
using System.Globalization;


class main
{
    static void Main()
    {

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

แต่ฉันได้รับข้อผิดพลาดสองข้อนี้

ข้อผิดพลาด 1 ประเภทที่กำหนดไว้ล่วงหน้า 'Microsoft.CSharp.RuntimeBinder.Binder' ไม่ได้ถูกกำหนดหรือนำเข้า

ข้อผิดพลาด 2 ไม่พบประเภทที่จำเป็นในการรวบรวมนิพจน์ไดนามิก คุณไม่มีการอ้างอิงถึง Microsoft.CSharp.dll และ System.Core.dll?

ฉันอ่านโพสต์นี้แต่ฉันใหม่กับ C # และฉันไม่เข้าใจว่าปัญหาคืออะไร โดยเฉพาะไฟล์อะไรที่เรียกว่า.configไฟล์เหล่านี้..


25
ตรวจสอบการอ้างอิงของคุณ คลิกขวาและ "เพิ่มการอ้างอิง .. " ค้นหา "Microsoft.CSharp.dll" และเพิ่ม โดยปกติ System.Core.dll มามาตรฐานเมื่อคุณสร้างโครงการใหม่ไม่แน่ใจเกี่ยวกับ CSharp.dll
The Internet

คำตอบ:


586

ในหน้าต่าง explorer ของโซลูชันคลิกขวาที่การอ้างอิงเลือกเพิ่มการอ้างอิงไปที่แท็บ. NET ค้นหาและเพิ่ม Microsoft.CSharp


26
ฉันถูกอ้างอิงแล้ว แต่ฉันยังคงมีข้อผิดพลาดนี้อยู่ ฉันได้สร้างแอปพลิเคชัน ASP.Net MVC4 ใหม่ใน VS 2010 Stumped ฉันลบและอ่านใหม่และข้อผิดพลาดหายไป การทำความสะอาด / การสร้างใหม่ไม่ได้ช่วย
Paul

@ พอล: เกิดขึ้นกับฉันเหมือนกันหลังจากอัปเกรดโครงการจาก 4.0 เป็น 4.5 เวอร์ชัน # / etc เหมือนกันระหว่าง 4.0 / 4.5 IIRC ซึ่งอาจเป็นเหตุผล
Steven Evers

13
ทีมงาน Visual Studio ควรคิดถึงการปล่อยให้ผู้คนวางเมาส์เหนือข้อผิดพลาดแล้วเลือก "เพิ่ม Microsoft.CSharp ไปยังการอ้างอิง"
geoyws

8
@Geoyws หนึ่งคำ: ReSharper
2864740

2
@ user2864740 โดยปกติ Resharper ทำสิ่งนี้ แต่ในกรณีนี้ ReSharper จะไม่แสดงอะไรเลย
Pulle

21

ตรวจสอบให้แน่ใจว่าโครงการของคุณกำหนดเป้าหมายเป็น. NET Framework 4.0 Visual Studio 2010 รองรับ. NET Framework เป้าหมายด้วยเช่นกัน แต่. NET 3.5 ไม่สนับสนุนdynamicคำหลัก

คุณสามารถปรับรุ่นเฟรมเวิร์กในคุณสมบัติโครงการ ดูhttp://msdn.microsoft.com/en-us/library/bb398202.aspxสำหรับข้อมูลเพิ่มเติม


7

ฉันมีปัญหาเดียวกันยกเว้นการลบและเพิ่มการอ้างอิงกลับไม่ได้แก้ไขข้อผิดพลาดดังนั้นฉันจึงเปลี่ยนรุ่น. Net จาก 4.54.5.1การ

เพื่อให้บรรลุนี้ไปที่web.configไฟล์ของคุณและเปลี่ยนบรรทัดต่อไปนี้

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

สำหรับสิ่งนี้

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

และสร้างใหม่


6

เส้นสีแดงใต้ ViewBag ทำให้ฉันปวดหัวเป็นเวลา 3 เดือน) เพียงแค่ลบการอ้างอิง Microsoft.CSharp จากโครงการแล้วเพิ่มอีกครั้ง


3
สิ่งนี้ไม่ได้ผลสำหรับฉันแม้ว่าฉันจะมีเส้นสีแดงในรายการ ViewBag ของฉันด้วย
knocte

1

ฉันมีปัญหาเดียวกันและแก้ไขได้โดยลบการอ้างอิง "Microsoft.CSharp" ออกจากโครงการแล้วเพิ่มอีกครั้ง


1

สำหรับฉันการลบและเพิ่มการอ้างอิงถึง Microsoft.CSharp แก้ไขปัญหาชั่วคราวจนกว่าจะแก้ไขไฟล์ที่ได้รับผลกระทบ การปิด Visual Studio และเปิดโครงการอีกครั้งจะแก้ไขในระยะยาวดังนั้นจึงเป็นตัวเลือกหากสถานการณ์นี้เกิดขึ้นในขณะที่ Microsoft.CSharp ถูกอ้างอิงอยู่แล้ว

อาจเป็นการเริ่มต้น IDE ใหม่ในขั้นตอนแรกดูเหมือนไม่สำคัญ แต่นี่เป็นเครื่องเตือนความจำสำหรับคนอย่างฉันที่ไม่คิดว่าเป็นสิ่งแรกที่ต้องทำ


0

สิ่งเหล่านี้ไม่ได้ผลสำหรับฉัน

ไลบรารีคลาสของฉันอ้างอิงถึงทั้ง System.Core และ Microsoft.CSharp อย่างแน่นอน Web Application เป็น 4.0 และไม่สามารถอัปเกรดเป็น 4.5 ได้เนื่องจากปัญหาการสนับสนุน

ฉันพบข้อผิดพลาดในการรวบรวมเทมเพลตมีดโกนด้วยมีดโกนเครื่องยนต์และพบเป็นระยะ ๆ เหมือนหลังจากเว็บแอปพลิเคชันเริ่มต้นใหม่

วิธีแก้ปัญหาสำหรับฉันคือการโหลดแอสเซมบลีด้วยตนเองจากนั้นลองการดำเนินการเดียวกันอีกครั้ง ...

        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;
            }
        }

หวังว่านี่จะช่วยให้คนอื่นออกไปที่นั่น


-2

หากคุณพลาด Microsoft.CSharp.dll ข้อผิดพลาดนี้สามารถเกิดขึ้นได้ ตรวจสอบการอ้างอิงโครงการของคุณ


3
ยินดีต้อนรับสู่ Stack Overflow! คุณอาจต้องการรวมตัวอย่างรหัสหรือคำอธิบายเพิ่มเติม ดูเหมือนว่าจะเป็นความคิดเห็นมากกว่านี้
Gary Storey

5
โดยทั่วไปคุณพูดในสิ่งเดียวกันกับคำตอบที่ได้รับเมื่อ 3 ปีที่แล้ว
Ilya Luzyanin
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.