33

MSBuild ( NAnt経由) を使用して、一連のVB.NETアセンブリをコンパイルしています。これらのアセンブリは COM Interop に依存しているため、64 ビット OS 上で 32 ビット モードで動作することを保証する必要があります。Visual Studio でプロジェクトを変更することにより、実行可能アセンブリを 32 ビットにコンパイルできますが、ビルド サーバーですべての実行可能ファイルを強制的に 32 ビット モードにコンパイルできるようにしたいと考えています。

MSBuild に対していくつかのコマンド ライン パラメーターを試してみましたが、うまくいきませんでした。

  • /p:プラットフォーム=win32
  • /p:プラットフォーム=x86
  • /p:プロセッサ アーキテクチャ=x86

私は何を間違っていますか?VB プロジェクトをコンパイルするときに MSBuild が使用するプロパティへの参照はありますか?

4

8 に答える 8

53

MSDNによると、あなたは正しいことをしているとのことです。のように見え/p:Platform=x86ますが、実際にはそうかもしれません/p:PlatformTarget=x86

そのパラメーターを使用してMSBuildを直接呼び出すようにしてください(NAntファイルに問題がないことを確認してください。正しいビルド構成(デバッグ /リリース)のビルド出力を確認してください。

于 2009-07-02T14:24:18.393 に答える
22

If the assemblies themselves are always going to be 32 bit, why not add the setting to the .vbproj file? That will take MSBuild out of the equation.

Just add the following line to the initial PropertyGroup in the .vbproj file

<PlatformTarget>x86</PlatformTarget>
于 2009-07-02T14:23:46.583 に答える
19

念のため、このコマンドラインを使用して x86 プラットフォーム ターゲットをビルドしました。

C:\Windows\Microsoft.NET\Framework\v2.0.50727\MSBuild.exe my.sln /t:build /p:Configuration=Release;Platform=x86
于 2012-05-09T07:39:30.277 に答える
4

ソリューションエクスプローラーで、ルートノード→構成マネージャーを右クリックします。内の各プロジェクトに32ビットとしてビルドするように指示するソリューション全体の構成を定義する必要があります。(注:少なくとも1つのプロジェクトを32ビットとしてビルドするように設定したことがある場合は、おそらくすでに1つあります。)ステップバイステップのウォークスルーについては、MSDNブログ投稿のソリューション構成を参照してください。

次に、チームビルド .proj/.targetsファイルで目的の「プラットフォーム」と「フレーバー」を指定します。例えば:

<ConfigurationToBuild Include="Release|x86">
    <FlavorToBuild>Release</FlavorToBuild>
    <PlatformToBuild>x86</PlatformToBuild>
</ConfigurationToBuild>

これらのプロパティセクションを複数指定して、いくつかの組み合わせを作成できます。「Release|x86」文字列(またはそのような文字列)を.slnファイルから直接コピーして貼り付け、完全に一致するようにします。ソリューションエクスプローラーから直接取得することはできません。

あなたのコメントについて:

MSBuildプロパティの評価は、宣言型と命令型のスタイルが混在しているため、かなり複雑です。詳細については、ブログ投稿MSBuildPropertyEvaluationを参照してください。私はその繊細さに頼りたくない。

コマンドラインで指定されたプロパティが他のすべてをオーバーライドする必要があるのは事実ですが、チームビルドには別の複雑さの層があります。ComputeConfigurationListタスクは、通常のタスクとしてではなく、再帰的なMSBuild呼び出しを介して繰り返し呼び出されます。これを実現する方法は、のような通常のプロパティを取得し、構成ごとに1回、オンザフライで生成される(など)PlatformToBuildと呼ばれる一連のグローバルプロパティにラップすることです。ConfigurationToBuild.PlatformToBuildこれにより、Team Buildエンジンは内部的にはるかに柔軟になりますが、必要なコマンドライン動作のハッキングも難しくなります。

コマンドラインで直接設定ConfigurationToBuild.PlatformToBuildしてみることができます—うまくいくかもしれませんが、よくわかりません。ただし、単一のビルド定義で複数の構成をビルドすることを確実に防ぐことができます。このため、私は上記のアドバイスに固執しています。

于 2009-07-02T14:30:53.340 に答える
2

まったく同じ問題が発生した後、MSBuild のバージョンの使用をC:\WINDOWS\Microsoft.NET\Framework64... からC:\WINDOWS\Microsoft.NET\Framework(no 64) のバージョンに切り替え、問題なくコンパイルされました。

于 2010-08-23T18:32:29.913 に答える
1

この質問に対する Nant msbuild-Task の回答:

<msbuild project="your.sln">
    <property name="PlatformTarget" value="x86" />
</msbuild>
于 2012-10-16T10:56:39.193 に答える