2009-07-10 79 views
7

32ビットコンピュータで正常に動作する.NET Framework 2.0を使用してC#アプリケーションを開発しました。しかし、64ビット環境でアプリケーションを実行するとクラッシュします。64ビット環境で32ビット.NETアプリケーションを実行するにはどうすればよいですか?

私のアプリケーションを64ビット環境で実行する必要があります。

どうすればよいですか?

+2

私たちは、それよりもむしろ、より多くの情報が必要になります。 P/Invokeを使用していますか?あなたはコードの特定の領域にそれを分離しましたか? –

答えて

0

32ビット専用のライブラリを参照していない限り(Jet DBドライバは一例です)、アプリケーションを32ビットのみにコンパイルするようにコンパイラに指示していない限り、実行する必要があります。

クラッシュは何を言いますか?

+1

コンパイラが32ビットのみをコンパイルするように指示されている場合、実際には*動作するはずです。実際問題としてはおそらく許容可能な修正です。 – harms

4

プロジェクトのビルド設定で、プラットフォームターゲットを任意のCPUではなくx86に設定します。これは、プロジェクトが64ビットでは利用できない32ビットサブシステムへの "隠された"依存関係を持つ問題を解決します。あなたのアプリケーションは64ビットWindows上で32ビットのsusbsystemで実行されます。

9

64ビットWindows上の32ビットライブラリに対して実行されるCPUの代わりに、x86用にコンパイルできます。

64ビットWindowsにインストールする場合は、64ビット版の32ビットライブラリを交換します。いくつかのSqlite dllの中には32/64ビットに特化したものがあります。

+0

+1この単純な解決策は、x86とx64のビルドを並行してサポートする必要がなくなりました!私は何度もupvoteできますように願っています! –

1

私は同じ問題に直面しました。私のケースでは、私のアプリケーションのメインアセンブリ(.exe)を "x86"のためにコンパイルするだけで十分でした。他のアセンブリ(.dll)は "任意のCPU"でコンパイルされます。

私たちのアプリケーションは、32Bitと64Bitシステムでうまく動作します。

0

Windows/ASP.NETアプリケーションですか?

これはASP.NETアプリケーションの場合です。同時に32/64ビットモードのみを実行することができます。

ケース1. IISのアプリケーションプールでEnable32bitApplicationにする必要があります。 その後、IISをリセットします。

ケース2. regeditで対応するDLLを確認します。

それがWindowsベースの場合は、Visual Studioのプロンプトから次のコマンドを実行し、

CorFlags.exe TheApp.exe /32BIT+ //Enables 32 bit application. 
4

ここでは、あなたが再コンパイルを避けるために探している場合の素敵なソリューションであることが見えるものです。各ターゲットマシンに変更が必要であることに注意してください。あなたは64ビットマシンを持っていると は、32ビットCLRで動作する.NETアプリケーションを実行したい場合は

あなたのマシン

セットに .NETフレームワークに変更を加える必要があります。NETフレームワークは

は、コマンドプロンプトを開き

この コマンドによってモードWOWでCLRをロードし、このコマンドを入力する

C:\ WINDOWS \ Microsoft.NET \ Framework64 \ v2.0.50727のLdr64.exe \ SetWow

これで、.NET 32ビットCLRだけを使用するアプリケーションを実行できるはずです。

デフォルト64ビットのフレームワークの実行に戻す

C:\ WINDOWS \ Microsoft.NET \ Framework64 \ V2.0.50727 Ldr64.exe \ Set64

source

2

上記のFredrik Leijonの答えを拡大するだけで、これはあなたが後になったことだと思います。

32ビット環境でアプリケーションを実行するために、64ビットと32ビットの両方のウィンドウが表示されます。

あなたの「リリース」設定で同じことをするためのメモ。

enter image description here

これは、順番に次のようにピックアップするMSBuildのためのあなた*の.csprojファイルを更新します(以下<PlatformTarget/>要素を確認してください):

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> 
<OutputPath>bin\Debug\</OutputPath> 
<ErrorReport>prompt</ErrorReport> 
<WarningLevel>4</WarningLevel> 
<PlatformTarget>x86</PlatformTarget> 
</PropertyGroup> 
関連する問題