[解決済み] VS2015 のビルドがエラーメッセージなしで失敗し、Dynamic が表示される。
質問
JSONを返すコードの一部でユニットテストを書いていました。それが返す型は無名型であり、私はそれの値を検証するために、オブジェクトを
dynamic
にキャストしてアサーションを行うことにしました。
しかし、私がそれを行うとき、私のビルドは失敗しますが、私はエラーメッセージを持ちません。新しいユニット テスト プロジェクトで、非常に単純なコードでこれを再現することができました。
[TestMethod]
public void TestMethod1()
{
var obj = new { someValue = true };
dynamic asDynamic = obj;
Assert.IsTrue(asDynamic.someValue);
}
ビルドに失敗したときのスクリーンショットは以下を参照してください。
アサーションをコメントアウトするとビルドが成功するのですが。
一方、LinqPad 5 beta (Roslynコンパイラーを使用) で次のコードを実行したところ、問題は発生しませんでした。
var obj = new { someValue = true };
dynamic asDynamic = obj;
Console.WriteLine((asDynamic.someValue == true).ToString());
真実
どうなっているのでしょうか?エラーが表示されないので、私が使用している
dynamic
の使い方が間違っているのか、それとも
IsTrue()
のために
dynamic
のせいなのか、それともコンパイラのバグなのか(非常に疑わしいですが、私のコードに何か問題があるという証拠を持っていません)。
オーバーロードの問題に関して、私は
Assert.IsTrue((bool)asDynamic.someValue);
を試してみましたが、ビルドはまだ失敗し、エラーメッセージはまだありません。
RonBeyerのコメントに従い、以下のようなキャストも試しましたが、効果はありませんでした。
dynamic asDynamic = (dynamic)obj;
Assert.IsTrue(((dynamic)asDynamic).someValue);
Assert.IsTrue((bool)asDynamic.somevalue);
よく見てみると、Outputウィンドウにエラーが表示されていました。
c:...\DynamicBuildFailTestUnitTest1.cs(16,33,16,42): error CS0656: Missing compiler required member 'Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo.Create'
なるほど、VS2013の方がエラーの報告が多いので、それを元に検索してみます。
よし への参照を追加すると、ビルドエラーが修正されました。 しかし、おそらく VS2015 の問題であり、(私の考えでは)解決されるはずなので、この質問をオープンにしておきます。
どのように解決するのですか。
コンパイラーエラーがあり、Visual Studio 2015 はエラーを適切に報告しないだけです。しかし、Visual Studio 2013 はエラーを報告します。
こちらで回答しています。 https://stackoverflow.com/a/13568247 :
要するに
<ブロッククオート
Microsoft.CSharpへの参照を追加することで、以下のように
dynamic
をこのようにします。
関連
-
[解決済み】パディングが無効で、削除できない?
-
[解決済み】クロススレッド操作が有効でない。作成されたスレッド以外のスレッドからアクセスされたコントロール
-
[解決済み】値が期待した範囲に収まらない
-
[解決済み】ファイルへの読み書きの際に共有違反のIOExceptionが発生する C#
-
[解決済み】2年前のMSDateを把握する【クローズド
-
[解決済み] ...基礎となる接続は閉じられました。予期しないエラーが受信で発生しました
-
[解決済み】エラー「必要なフォーマルパラメータに対応する引数が与えられていない」を解決する?
-
[解決済み] [Solved] .NETでスレッドの終了を待つには?
-
[解決済み] ファイルまたはアセンブリを読み込めませんでした ... 不正なフォーマットでプログラムをロードしようとしました (System.BadImageFormatException)
-
[解決済み] Visual Studio build fails: unable to copy exe-file from obj 001debug to bin 001debug
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C#で四捨五入する方法
-
[解決済み] [Entity Framework 4.1でエンティティに関連オブジェクトを追加する際に、エンティティオブジェクトをIEntityChangeTracker.の複数のインスタンスから参照できない。
-
[解決済み] 保護レベルによりアクセス不能になりました。
-
[解決済み] エンティティタイプ <type> は、現在のコンテキストのモデルの一部ではありません。
-
[解決済み】トランスポート接続からデータを読み取れない:既存の接続は、リモートホストによって強制的に閉じられました。
-
[解決済み】ORA-01008: すべての変数がバインドされていません。これらはバインドされています。
-
[解決済み】MetadataException: 指定されたメタデータ・リソースをロードできない
-
[解決済み】Visual studio 2019がデバッグ時にフリーズする件
-
[解決済み】5.7.57 SMTP - MAIL FROMエラー時に匿名メールを送信するためにクライアントが認証されない
-
[解決済み】ユーザー設定値を別のユーザー設定値で設定する