2013-04-01 29 views
6

Visual Studio 2010を使用して、x86とx64の両方のターゲットを持つC#プロジェクトを作成しています。 IDEを使用してビルドすると、x64およびx86ターゲットの正しい結果が得られます。ビルドx64 C#プロジェクトとmsbuildの結果が32ビットターゲット

コマンドラインでmsbuildを使用すると、x64をコマンドラインで指定しても、すべてがx86でビルドされています。

.Net 4.0から.Net 4.5にアップグレードするまでは、この問題はありませんでした。

.Net 4.0では、コマンドラインでx86を指定してもx64ターゲットを取得できました。

.Net 4.0環境でビルドした後、.Net 4.5環境で別のビルドを行い、出力をログファイルにパイプしました。私は、ログファイル内のいくつかの違いに気づいたが、私は、これは私の問題を引き起こしているものだと思う:

.NET 4.0では

私はログファイルに次の行を参照してください。

/参照:C:\ WINDOWS \マイクロソフト。ネット\アセンブリ\ GAC_MSIL \ Microsoft.CSharp \ v4.0_4.0.0.0__b03f5f7f11d50a3a \ Microsoft.CSharp.dll

の.Net 4.5で私は、ログファイルに次の行を参照してください。 /R: "C:\プログラムファイル(x86)\ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.0 \ Microsoft.CSharp.dll "

アイデア?縫い目.Net 4.5はx86固有のパスを使用しています。

+1

msbuildを実行するのにどのコマンドラインを使用しますか? slnまたはcsprojファイルをビルドしますか?どのように特定の設定をパスしますか? – Lanorkin

+0

msbuild project.sln/p:プラットフォーム= "x64"/t:クリーン;再構築/ p:構成=デバッグ – Tony

+0

この行の設定はログ 'ビルドソリューション構成"の最初の部分に正しいですか?その結果が間違っていることをどう理解していますか?どの出力ディレクトリが作成されますか? 'bin \ x86 \ Debug'または' bin \ x64 \ Debug'ですか? – Lanorkin

答えて

5

これは、ソリューションのx64構成がAnyCPUとしてプロジェクトを構築するように構成されている場合に発生します。 .Net 4.5の新しい設定オプションPrefer 32 bitは、Prefer32bitフラグを持つ実行ファイルを64ビットマシン上で32ビットプロセスとして起動させます。 Prefer32bitフラグはMSBuildターゲットではデフォルトであるため、記述する動作が表示されます。つまり、.Net 4.0から.Net 4.5へのアップグレードでAnyCPUプロジェクトが64ビットから32ビットに切り替わります。

は、x64のために構築されたプロジェクト(ソリューションではなく)を作成、コマンドライン上で指定するには:

msbuild project.csproj /p:Platform=x64 

お知らせは、コマンドラインではないの.slnため、.csprojためのものです。

また、構成マネージャでソリューションの構成を確認し、x64として構築されていることを確認してください。

+1

ありがとう!私は/ property:Prefer32bit = falseを私のmsbuildコマンドラインに追加することができました。それは問題を解決するようです。 – Tony

+0

64ビットのソリューションを構築するためにmsbuildでどのようなスイッチを使用しますか? –

関連する問題