2012-01-23 16 views
13

私はScintillaNETへの参照を含むC#プロジェクトを持っています。残念ながら、ScintillaNETはマシンのアーキテクチャを検出して、実行中のアーキテクチャに基づいてネイティブDLLをロードするのが好きです。つまり、私のプロジェクトはx86とx64にプリコンパイルする必要があります(上記の検出のためにCPUを使用することはできません)。x86システムでC#.NET x64バイナリをコンパイルする

問題は、私のビルドサーバーがx86のみであることです。 x86マシンでx64モードで.NETアセンブリをコンパイルできる方法はありますか?私が知っている限り、トグルは単にコンピュータに必要なアーキテクチャ用のアセンブリをロードさせるだけで、コンパイル時にはアーキテクチャ依存のコードを実際に出力しませんが、ビルドサーバーIでMono 2.10.6でコンパイルすると

「エラーCS0016:: `ScintillaNet」をファイルに書き込めませんでした、原因:AMD64" のようなエラーに取得し、これはLinuxベースであるよう

を私はPEヘッダを変更するCorFlags.exeを使用することはできませんサーバーを構築します。これを行う方法はありますか?

+5

意味はありませんが、BitintnessはScintillaNETのようなライブラリではなく、メイン起動アセンブリ(EXE)によって決まります。 AnyCPUを使用してください。 –

+4

彼のプロジェクトのようなサウンドは、メインのスタートアップアセンブリです。 x64のマシンでx86として起動する場合、Scintillaは独自の検出を行い、x64を見つけ、x86アプリケーションにネイティブx64 dllをロードしようとします。本当にScintillaのバグは、マシンの代わりに現在のプロセスのアーキテクチャを検出しないということです。 – antiduh

+0

モノドキュメントによれば、 '--aot'オプションはplatformをパラメータとして取りません。現時点では可能ではないようです。 –

答えて

2

プロジェクトを任意のCPUに戻すことでこの問題を解決しました。 Scintillaは.NETの設定に関係なくネイティブアーキテクチャでしか動作しないため、私のマシンで64ビットとして実行しなければなりませんでした。もともと、編集と継続を行うためにアーキテクチャを32ビットに強制しようとしていましたが、これはScintillaがアーキテクチャをどのように検出したかを混乱させます。

実際には、Scintillaはネイティブアーキテクチャに強制されますが、任意のCPUでビルドして実行すると、.NETアプリケーションは正常に動作します。さらに、Scintillaを搭載した.NETアプリケーションを32ビットモードで実行することはできないため(編集と継続を行うために)、私のマシンで64ビットモードを強制することは利点がありません。

関連する問題