動的式のコンパイルに必要な1つ以上のタイプが見つかりません。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);    
    }
}

しかし、私はこれらの2つのエラーを得ています

エラー1定義済みの型 'Microsoft.CSharp.RuntimeBinder.Binder'が定義またはインポートされていません

エラー2動的式のコンパイルに必要な1つ以上のタイプが見つかりません。Microsoft.CSharp.dllおよびSystem.Core.dllへの参照がありませんか?

私はこの別の投稿を読みましたが、C#は初めてであり、本当に何が問題なのか理解できませんでした。特に、これらのいわゆる.configファイルは何でどこにあるのか。


25
参照を確認してください。右クリックして「参照の追加...」を選択します。「Microsoft.CSharp.dll」を検索して追加します。通常、新しいプロジェクトを作成すると、System.Core.dllが標準になりますが、CSharp.dllについてはよくわかりません
インターネット

回答:


586

ソリューションエクスプローラーウィンドウで、[参照]を右クリックし、[参照の追加]を選択して、[。NET]タブに移動し、Microsoft.CSharpを見つけて追加します。


26
私はすでに参照されていましたが、まだこのエラーが発生しました。VS 2010で新しいASP.Net MVC4アプリケーションを作成しました。困惑し、それを削除して再度追加したところ、エラーは解消しました。クリーニング/再構築は助けにはならなかった。
Paul

@Paul:プロジェクトを4.0から4.5にアップグレードした後も同じことが起こりました。バージョン番号/ etcが4.0 / 4.5 IIRC間で同じであることが理由である可能性があります。
Steven Evers 2013

13
Visual Studioチームは、
ユーザー

8
@Geoyws一言:ReSharper。
user2864740 2015

2
@ user2864740通常、Resharperがこれを行います。ただし、この場合、ReSharperは何も表示しません。
Pulle

21

プロジェクトが.NET Framework 4.0をターゲットにしていることを確認してください。Visual Studio 2010は.NET 3.5フレームワークターゲットもサポートしていますが、.NET 3.5はdynamicキーワードをサポートしていません。

フレームワークのバージョンは、プロジェクトのプロパティで調整できます。詳細については、http://msdn.microsoft.com/en-us/library/bb398202.aspx参照してください。


7

参照を削除して追加してもエラーが修正されないことを除いて、同じ問題が発生したため、.Netバージョンをに変更し4.5ました4.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アプリケーションは4.0で、サポートの問題により4.5にアップグレードできませんでした。

Razor Engineを使用してかみそりテンプレートをコンパイルするときにエラーが発生し、ウェブアプリケーションが再起動された後など、断続的にしか発生しませんでした。

私のために働いた解決策は、手動でアセンブリをロードしてから、同じ操作を再試行することでした...

        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 2015年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.