Satu atau lebih jenis yang diperlukan untuk mengkompilasi ekspresi dinamis tidak dapat ditemukan. Apakah Anda kehilangan referensi untuk Microsoft.CSharp.dll dan System.Core.dll?

287

Saya mencoba mengkompilasi kode ini di Microsoft Visual C # 2010

using System;
using System.Globalization;


class main
{
    static void Main()
    {

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

tapi saya mendapatkan dua kesalahan ini

Kesalahan 1 Jenis yang ditentukan sebelumnya 'Microsoft.CSharp.RuntimeBinder.Binder' tidak didefinisikan atau diimpor

Kesalahan 2 Satu atau lebih jenis yang diperlukan untuk mengkompilasi ekspresi dinamis tidak dapat ditemukan. Apakah Anda kehilangan referensi untuk Microsoft.CSharp.dll dan System.Core.dll?

Saya membaca posting lain ini tetapi saya baru mengenal C # dan saya tidak bisa mengerti apa sebenarnya masalahnya. Terutama apa dan di mana .configfile - file ini disebut ..

pengguna1232138
sumber
25
Periksa Referensi Anda. Klik kanan dan "Tambahkan Referensi .." Cari "Microsoft.CSharp.dll" dan tambahkan. Biasanya System.Core.dll datang standar ketika Anda membuat proyek baru, tidak begitu yakin tentang CSharp.dll
Internet

Jawaban:

586

Pada jendela penjelajah solusi Anda, klik kanan ke Referensi, pilih Tambahkan Referensi, buka tab .NET, temukan dan tambahkan Microsoft.CSharp.

M. Mennan Kara
sumber
26
Milik saya sudah direferensikan namun saya masih memiliki kesalahan ini. Saya telah membuat aplikasi ASP.Net MVC4 baru di VS 2010. Bingung, saya menghapus dan membacanya, dan kesalahan itu hilang. Pembersihan / Pembangunan Kembali tidak membantu.
Paul
@ Paul: Hal yang sama terjadi pada saya setelah memutakhirkan proyek dari 4.0 menjadi 4.5. Versi # / etc adalah sama antara 4.0 / 4.5 IIRC yang mungkin menjadi alasannya.
Steven Evers
13
Tim Visual Studio harus benar-benar berpikir tentang membiarkan orang mengarahkan kesalahan dan kemudian pilih "Tambahkan Microsoft.CSharp ke Referensi"
geoyws
8
@ Geoyws Satu kata: ReSharper.
user2864740
2
@ user2864740 Biasanya Resharper melakukan ini. Tetapi dalam hal ini, ReSharper tidak akan menunjukkan apa pun.
Pulle
21

Pastikan bahwa proyek Anda menargetkan .NET framework 4.0. Visual Studio 2010 mendukung .NET 3.5 kerangka target juga, tetapi .NET 3.5 tidak mendukung dynamickata kunci.

Anda dapat menyesuaikan versi kerangka kerja di properti proyek. Lihat http://msdn.microsoft.com/en-us/library/bb398202.aspx untuk info lebih lanjut.

Chris Shain
sumber
7

Saya memiliki masalah yang sama kecuali menghapus dan menambahkan kembali referensi tidak memperbaiki kesalahan, jadi saya berubah Net versi dari 4.5ke 4.5.1.

Untuk mencapai ini, buka web.configfile Anda dan ubah baris berikut

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

untuk ini

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

dan membangun kembali.

dynamiclynk
sumber
6

Garis merah di bawah ViewBag adalah sakit kepala saya selama 3 bulan). Hapus saja referensi Microsoft.CSharp dari proyek dan kemudian tambahkan lagi.

Roma
sumber
3
ini tidak berfungsi untuk saya bahkan ketika saya juga memiliki garis merah di baris ViewBag saya
knocte
1

Saya memiliki masalah yang sama dan menyelesaikannya dengan menghapus referensi "Microsoft.CSharp" dari proyek dan kemudian menambahkannya lagi.

chan
sumber
1

Bagi saya, menghapus dan menambahkan kembali referensi ke Microsoft.CSharp memperbaiki masalah sementara hingga file yang terpengaruh diedit. Menutup Visual Studio dan membuka kembali proyek memperbaikinya lebih jangka panjang, jadi itu opsi jika situasi ini terjadi ketika Microsoft.CSharp sudah direferensikan.

Mungkin memulai kembali IDE sebagai langkah pertama tampaknya sepele, tetapi ini adalah pengingat bagi orang-orang seperti saya yang tidak menganggap itu sebagai hal pertama yang harus dilakukan.

Lembut
sumber
0

Tak satu pun dari ini bekerja untuk saya.

Pustaka kelas saya pasti merujuk semua System.Core dan Microsoft.CSharp. Aplikasi Web adalah 4.0 dan tidak dapat ditingkatkan ke 4.5 karena masalah dukungan.

Saya mengalami kesalahan saat mengkompilasi template silet menggunakan Razor Engine , dan hanya menjumpainya sesekali, seperti setelah aplikasi web dihidupkan ulang.

Solusi yang berhasil bagi saya adalah memuat rakitan secara manual kemudian memasang kembali operasi yang sama ...

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

Semoga ini bisa membantu orang lain di luar sana.

Mick
sumber
-2

Jika Anda kehilangan, Microsoft.CSharp.dll kesalahan ini dapat terjadi. Periksa referensi proyek Anda.

Ramkumar Thangavel
sumber
3
Selamat Datang di Stack Overflow! Anda mungkin ingin memasukkan contoh kode atau lebih dari satu penjelasan. Ini sepertinya lebih seperti komentar,
Gary Storey
5
Anda pada dasarnya mengatakan hal yang sama seperti pada jawaban yang diterima yang diberikan 3 tahun yang lalu.
Ilya Luzyanin