0

私は仕事でVS2010を使用しており、前進するためのテストとしてVS2012をインストールしています。

このステップの後、以前は正しかったすべてのプロジェクトが機能しなくなります (既にコンパイルされているか、VS2010 によってまだビルドされています)。

多くの場所で例外が発生します: System.Security.VerificationException. この例外は、.NET 3.5 または .NET 4 のライブラリからも発生します。XAML の InitializeComponents などで例外が発生します。

それは何ですか?新しいフレームワークをインストールすると、既存のすべてのプロジェクトが壊れるのはなぜですか?

VS2012と.NET 4.5を消去せずに解決するには?

提案をありがとう。

4

3 に答える 3

1

この問題 (32 ビットにのみ影響する) の根本は、base/this コンストラクターを呼び出す前にコンストラクターに (IL レベルで) プログラム フローがある場合、コードが不適切に検証に失敗することです。base/this への呼び出しの引数に操作がある WPF で使用される比較的一般的な型がいくつかある?:ため、これらの特定のコンストラクターを使用することはできません。Lazy と ObservableCollection で失敗するのを見ただけです。これらの両方のタイプには、フローを含まないコンストラクターがいくつかあるため、コンストラクター呼び出しをパラメーターなしのバージョンを使用するように変更することで回避できます。もう 1 つのシナリオ (FluentValidation で表示されるシナリオ) は、コンストラクターにラムダがある場合に C# コンパイラーがフローを挿入することです。その回避策は、代わりにラムダの実際のメソッドを作成することです。

私の説明からは明らかでない場合に備えて、私たち (CLR チーム) は問題を認識しており、積極的に解決に取り組んでいます。

于 2012-08-27T20:34:36.050 に答える
0

FluentValidation.dll への参照を使用していますか? はいの場合は、昨日作成したこの投稿をご覧ください。これはVerificationException の問題に役立つ可能性があります

于 2012-08-17T06:35:26.060 に答える
0

同じ例外が発生し、FluentValidation を使用していた単体テストに絞り込みました。x86としてビルドされ、x64である必要がある私のテストプロジェクトであることが判明しました。

これを修正するには、プロジェクトを右クリックして [プロパティ] を選択します。左側のペインで [ビルド] を選択し、[プラットフォーム ターゲット:] を [任意の CPU] に設定します。

于 2012-08-16T13:30:39.493 に答える