1

32ビットと64ビットの両方をサポートするアプリをリリースしたいと思います。私はelmahとSQLiteを使用しています。どちらのパッケージにも、32ビットと64ビット用に別々のバイナリがあります。32ビットと64ビットの両方のDLLを追加できません。bin / releaseフォルダーに異なるファイル名の32ビットと64ビットの両方のDLLを追加しようとしましたが、画像形式のエラーが発生します。(ディレクトリ内のDLLと32ビットを実行するシステムの両方で64ビットのWindowsサーバーで実行してテストしました)。

同じフォルダーを32ビットまたは64ビットとして実行できるようにアプリをリリースするにはどうすればよいですか?

4

1 に答える 1

1

少し前に32ビットと64ビットで戦ったばかりなので、少なくともいくつかの一般的な観察を加えて、これを試してみます。この質問は1年以上前のものですが、回答を「受け入れる」かどうかに関係なく、回答が誰かに役立つことを願っています(これは、一部の質問とは対照的に、StackOverflowで質問に回答する理由ではありません)。

まず、32ビットのみがあなたの状況のWOW64コンテキストで機能しますか?多くの場合、そうなるでしょう、そしてそれはあなたの状況を単純化することができます。

ただし、少なくともドキュメントによれば、サードパーティのライブラリによってWOW64が機能しなくなる状況があります。これは、私が直面していた状況です。この問題を解決するには、32ビットと64ビットの両方のビルドが必要でした。どういうわけか「同じフォルダ」で両方を解放する方法があれば、私はそれを見つけられませんでした。しかし、そうすることは実際にはそれほど難しくありませんでした。VisualStudioプロジェクトファイルを手動で編集する必要がありました。私が思い出すと、基本的な手順は次のとおりです。

  1. Visual Studioでビルド定義を慎重に設定して、リリースバージョンとデバッグバージョンの両方で個々のプロジェクトが正しく設定されるようにします。つまり、私の場合、ネイティブライブラリとやり取りするものはすべて、CPUではなくx86またはx64形式で構築する必要がありました。MSILのみのプロジェクトは、私が知る限り、任意のCPUにすることができます。
  2. プロジェクトファイル(.csprojなど)を編集して、ビルドに基づいて正しいサードパーティのDLLが正しいフォルダーに配置されるようにします。これを達成するためのより簡単な方法があれば、私はそれを見ませんでした。これが発生するための明らかなプロジェクトファイルがソリューション内に存在する可能性がありますが、次の場合に限り、ソリューション内のどこでも実際に発生する可能性があります。
  3. 実際のWebプロジェクトでは、Webプロジェクトがこの他のプロジェクトを直接使用していない場合でも、サードパーティのDLLコピーを参照としてプロジェクトを追加してください。そうすれば、ファイルはビルドディレクトリにコピーされます。これは、私にはMSBuildまたはVisual Studioのバグのように見えますが、VS2010の時点では、修正されていないようです。また、サードパーティのDLLをApp_Codeなどのディレクトリにコピーする必要がある場合は、それを実行するためにWebプロジェクトファイルを編集する必要があります。

プロジェクトファイルを見て、具体的にどのような変更を加えたかを確認するために作業する必要がありますが、これらは基本的な手順でした。プロジェクト全体をAnyCPUとしてコンパイルする必要がない限り、32ビットバージョンと64ビットバージョンの両方をコンパイルして、必要なバージョンをデプロイする必要があると思います。ネイティブコードまたはアンマネージコードを使用していない限り、実際のコードは変更されない可能性があります。

私よりもこれをよく知っている人が来るかもしれませんが、これが誰かに役立つことを願っています。コメントに残っている質問に答えようと思います。

于 2011-04-10T03:20:27.300 に答える