2011-07-19 9 views
5

プロジェクトを32ビットから64ビットにアップグレードする必要があります。私のプロジェクトは現在、.net 2.0になっています(すぐに4.0になりますが、この問題に関しては本当に問題ありません)。私のプロジェクトはバイナリ形式でしかない古い.net 1.1アセンブリを参照しています。ご存知のように、64ビットのサポートは.net 2.0でのみ追加されました。私は、古いアセンブリのためにアプリケーションが実行されないと思っていました。64ビットアプリケーションの.net 1.1アセンブリの参照

しかし、私のアプリケーションは、.net 1.1のDLLを参照している間に、64ビットモード(タスクマネージャにスターは表示されません)でx64サーバー上で動作します。

私の質問は以下のとおりです。

  1. なぜそれが動作しますか?以前は、.net 1.1 アセンブリを64ビットアプリケーションで使用することはできません。
  2. 1.1アセンブリを保持していても何か欠点はありますか?あるいは、これらの1.1アセンブリの新しいバージョンを入手するために努力する必要がありますか?

EDIT:64ビットでネイティブにアプリケーション(asp.net)を実行する必要があることを忘れてしまいました。アプリケーションプールで32ビットの互換性を無効にしたため、アプリケーションは64ビットで動作します。

EDIT2:x64用にコンパイルされたアプリケーションをコンパイルして実行しようとしましたが、できます。したがって、それは純粋な64ビットモードで動作し、それについての質問はありません。

+0

あなたのアセンブリは32互換モードで動作すると思います。したがって、変更なしで動作します。 – VMAtm

答えて

6

.NET 1.1アセンブリには、.NET 2または.NET 4アセンブリと同じ種類のILが含まれています。メタデータの形式のみが変更されました。ジッタはそれを64ビットマシンコードに変換しても構わず、CLRは古いメタデータ形式を読み取ることができます。 .NET 1.1アセンブリにネイティブコードが含まれている場合にのみ問題があります。 Corflags.exeユーティリティ、ILONLYビット。そのアセンブリを再構築する魅力的な理由はありません。

+0

.NET 1.1はPE32ヘッダーのアセンブリをビルドし、CLRヘッダーの32ビットのみのフラグを正しく生成しないと仮定します。 –

+0

はい、アセンブリはILONLYです(実際に私が正しく理解していれば、すべての.net 1.1アセンブリはILONLYです)。バイナリアセンブリがプラットフォーム呼び出しによってネイティブコードを呼び出すかどうかを知るにはどうすればよいですか? – user328087

+0

ピンボケとは関係ありません。 C++/CLIコンパイラを使用してアセンブリ内にネイティブマシンコードを取得します。管理されたC++は1.1日後に戻る。 IntPtrが必要なintを使用することは、古いコードのpinvoke宣言が64ビットバージョンのWindowsでは無効である可能性があります。これにはデバッガが必要です。 –

0

アプリケーションはwow32(32ビットエミュレーションモード)で動作していますか?ほとんどのアプリケーションは実際にはx64モードで動作しません。アプリケーションを強制的にwow32(x86モード)で実行して、古いx86システムとの下位互換性を保ちます。それ以外の場合、アプリケーションはx64システムでのみ実行されますが、x86では実行されません。

x64システムでもアプリケーションを強制的にx86モードで実行すると、32ビットまたは64ビットのWindows OSに関係なく、すべてのmanchineを実行できます。

+0

私のアプリは純粋な64ビットモードで動作します。 x64でコンパイルされ、32ビット互換性がアプリケーションプールで無効になっており、タスクマネージャに星がありません。 – user328087

関連する問題