64 ビットの Windows 7 でNgenを使用して .NET 4.0 アプリケーションのネイティブ イメージを生成しようとしています。プラットフォームが x64 (または任意の CPU ) に設定されている場合、Ngen が失敗し、「Mscorlib.dll が原因で NGen を続行できない」と不平を言います。ネイティブ イメージ が あり ませ ん. '
x86 としてコンパイルし、適切な Ngen を使用すると、正常に動作します。また、.NET バージョンを 2.0 に変更すると動作します。(x86 Ngen で x64 アプリケーションを Ngen しようとすると、64 ビット バージョンを使用するように指示されます。)
詳細情報:
これは、CMD で見たもの (の一部) です。楕円 (= ...) はオリジナルに存在します。
1> アセンブリmscorlibのコンパイル、バージョン = 4.0.0.0、カルチャ = ニュートラル、PublicKeyToken = b77a5c561934e089 (CLR v4.0.30319) ...
1> mscorlib、バージョン = 4.0.0.0、カルチャ = ニュートラル、PublicKeyToken = b77a5c561934e089
.
2> アセンブリ アクセシビリティのコンパイル、バージョン = 4.0.0.0、カルチャ = ニュートラル、パブリック キートークン = b03f5f7f11d50a3a (CLR v4.0.30319) ...
.
2>Ngen は、イメージ アクセシビリティ、バージョン = 4.0.0.0、カルチャ = ニュートラル、PublicKeyToken = b03f5f7f11d50a3a のネイティブ コードを生成できませんでした。これは、次のエラーが原因です: Mscorlib.dll にネイティブ イメージがないため、NGen を続行できません(HRESULT からの例外: 0x80131F06) )
内部C:\Windows\assembly
を検索すると、3 つのmscorlib.dllが見つかりました。に1GAC_32
つ、GAC_64
(2.0.0.0 で始まるサブフォルダーに両方とも) に 1 つ、サブフォルダーに 1 つtemp
。
内部C:\Windows\Microsoft.NET
を検索すると、そのうちの 6 つが見つかりました。「v4.0...」で始まるフォルダーassembly
(と) の下に 2 つ、 GAC
' s に 4 つ: Frameworkに 2 つ、Framework64に 2 つ(それぞれ - 「v2.0...」に 1 つ、「v4.0...」に 1 つ)。32
64
Framework
これは、.NET 2.0 mscorlib のみが実際にネイティブ イメージとして (必要な場合に) 実行されるということですか? Ngen が .NET 4.0 のネイティブ イメージの保存に成功しないのはなぜですか?
結論: x64 をターゲットとする .NET 4.0 アプリケーションのネイティブ イメージを作成するにはどうすればよいですか?