1

アプリケーションと、それが依存する dll があり、csproj ファイルで .NET 3.5 をターゲットにするように設定されています。/p:TargetFrameworkVersion=v4.0コマンド ライン パラメーターとして msbuild に (NAnt を使用して)渡すことにより、.NET 4.0 をターゲットとするこれら 2 つのプロジェクトをビルドしようとしています。ビルドは成功していますが、プログラムを実行すると、BadImageFormatException ですぐにクラッシュします - 「このアセンブリは、現在読み込まれているランタイムよりも新しいランタイムによって構築されており、読み込むことができません」

.NET リフレクターを使用して、出力の exe と dll のすべての参照を確認しました。すべてが .NET 4.0 dll を参照しています。.NET 2 を参照するものはありません。それでも、私のデバッガーは、mscorlib 2.0.50727.4971 がロードされたと言っています。

プロジェクト自体を .NET 4 を対象とするように変更してから、Visual Studio でビルドすると問題なく動作します。

次の調査ステップがどうなるかわからないので、ここで少し立ち往生しています。そのバージョンの mscorlib をロードしている理由がわかりません。

4

1 に答える 1

3

< supportedRuntime > 要素がアプリケーションの に存在するかどうかを確認しますapp.config。これは、アプリケーションがサポートする共通言語ランタイムのすべてのバージョンを指定する必要があります。< supportedRuntime > 要素の完全な説明については、 http://msdn.microsoft.com/en-us/library/w4atty68.aspxを参照してください。

あなたの場合、アプリケーションは以前に .NET 3.5 を対象としapp.configていたため、CLR の「v2.0.50727」のエントリがある可能性が最も高いですが、「v4.0」に対応するエントリがないと思われます。

上記の記事で述べたように、エントリが完全に削除された場合、アプリケーションのビルドに使用されたランタイムのバージョンが使用されます。サポートされている各バージョンを で明示的に指定することをお勧めしますapp.config

于 2012-09-18T06:43:51.690 に答える