291

このコードを 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ファイルとは何か、どこにあるのか..

4

8 に答える 8

593

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

または、 Microsoft.CSharp NuGet パッケージを追加します。

Install-Package Microsoft.CSharp
于 2012-07-30T16:26:25.370 に答える
21

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

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

于 2012-07-30T16:26:34.160 に答える
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" />

そして再構築します。

于 2014-10-22T15:42:08.887 に答える
6

ViewBag の下の赤い線は、3 か月間頭痛の種でした )。プロジェクトから Microsoft.CSharp 参照を削除してから、再度追加してください。

于 2014-04-29T13:15:42.717 に答える
1

私にとっては、Microsoft.CSharp への参照を削除して再度追加すると、影響を受けるファイルが編集されるまで一時的に問題が修正されました。Visual Studio を閉じてプロジェクトを再度開くと、より長期的に修正されるため、Microsoft.CSharp が既に参照されているときにこの状況が発生した場合のオプションです。

最初のステップとして IDE を再起動するのは些細なことのように思えるかもしれませんが、私のようにそれを最初に行うこととは考えていない人のために、ここで注意してください。

于 2016-07-08T08:45:01.657 に答える
1

私は同じ問題を抱えていましたが、プロジェクトから「Microsoft.CSharp」参照を削除してから再度追加することで解決しました。

于 2014-08-21T06:32:20.893 に答える
0

これらのどれも私にとってはうまくいきませんでした。

私のクラス ライブラリは、間違いなく System.Core と Microsoft.CSharp の両方を参照していました。Web アプリケーションは 4.0 で、サポートの問題により 4.5 にアップグレードできませんでした。

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

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

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

うまくいけば、これは他の誰かを助けるかもしれません。

于 2015-07-07T00:25:44.367 に答える