VS2008からVS2012に変換しているアプリがあります。アプリは混合モードであり、複数のプロジェクトで構成されています。アップグレード後、マネージコードが入力されるとすぐにアプリがクラッシュしますが、次の例外があります。
タイプ'System.TypeInitializationException'の未処理の例外がPresentationFramework.dllで発生しました
追加情報:「System.Windows.Application」の型初期化子が例外をスローしました。
最も深い内部例外は次のとおりです。
「文字列の長さをゼロにすることはできません。パラメータ名:frameworkName」
スタックトレースは次のとおりです。
System.Runtime.Versioning.BinaryCompatibility.ParseFrameworkName(String frameworkName、String&identifier、Int32&version、String&profile)で
System.Runtime.Versioning.BinaryCompatibility.ParseTargetFrameworkMonikerIntoEnum(String targetFrameworkMoniker、TargetFrameworkId&targetFramework、Int32&targetFrameworkVersion)で
System.Runtime.Versioning.BinaryCompatibility.ReadTargetFrameworkId()で
System.Runtime.Versioning.BinaryCompatibility.get_AppWasBuiltForFramework()で
System.Runtime.Versioning.BinaryCompatibility..cctor()で
これは、クリーンビルドの後でのみ発生し、1つのプロジェクトをクリーンアップしてから再度ビルドするまで、実行するたびに発生します。その後、実行するたびに機能します。
JetBrainsを使用して.exeファイルを確認し、アプリが動作したときとクラッシュしたときのファイルを比較しました。アプリがクラッシュすると、次の行が.exeに含まれます。
[アセンブリ:TargetFramework( ""、FrameworkDisplayName = ".NET Framework 4")]
明らかに、フレームワーク文字列は空白であり、それが例外の原因となっています。アプリが動作する場合、その行は存在しないため、例外はありません。
明確にするために編集:アプリは、上記の行が.exeマニフェストに完全に含まれていない場合に機能します。VS2008では、上記の行が.exeマニフェストに含まれていないことを確認しました。マニフェストに含めるべきではないようです。VS2012のクリーンビルドでは、追加されて問題が発生しています。また、app.configファイルを使用していません。
これを修正する方法はありますか?