6

VS10 プロジェクト ファイル (.csproj) があります。コマンドラインからMSBuildを使用してこのプロジェクトを構築しています。長い間理解しようとしてきた簡単な質問があります。これらのコマンドライン引数の違いは何ですか:-

1. >MSBuild MyProg.csproj /p:Configuration="Release"
2. >MSBuild MyProg.csproj /p:Platform="AnyCPU" /p:Configuration="Release"   
3. >MSBuild MyProg.csproj /p:Platform="x86" /p:Configuration="Release"

csproj ファイルには、この PropertyGroup タグがあります

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
  <DebugSymbols>true</DebugSymbols>
  <DebugType>full</DebugType>
  <Optimize>false</Optimize>
  <OutputPath>..\..\bin\Debug\</OutputPath>
  <DefineConstants>DEBUG;TRACE</DefineConstants>
  <ErrorReport>prompt</ErrorReport>
  <WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
  <DebugType>pdbonly</DebugType>
  <Optimize>true</Optimize>
  <OutputPath>..\..\bin\Release\</OutputPath>
  <DefineConstants>TRACE</DefineConstants>
  <ErrorReport>prompt</ErrorReport>
  <WarningLevel>4</WarningLevel>
</PropertyGroup>

コマンドライン引数でプラットフォームを指定する場合と指定しない場合の違いを知りたいです。コマンド ラインで冗長パラメータ /v:d を使用してこれを調査しようとしましたが、ビルドごとにプラットフォームが異なることを除いて、違いは見つかりませんでした。

コマンドラインでプラットフォームを渡さない場合、プラットフォームは何になりますか? AnyCPU の代わりに x86 を渡すとどうなりますか?

ありがとう

4

1 に答える 1

11

.csproj ファイルでは、次の行で既定のプラットフォームが選択されていることが常に保証されます。

<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

つまり、$(Platform) が設定されていない場合は、固定のデフォルト (この場合は AnyCPU) が選択されます。この行を意図的に削除した場合は、復元する必要があります。または、存在しなかった場合は追加します。これにより、質問に対処できます。

コマンドラインでプラットフォームを渡さない場合、プラットフォームは何になりますか?

その行、この場合は AnyCPU によって設定されます。

AnyCPU の代わりに x86 を渡すとどうなりますか?

次に、要求したプラットフォームの選択 x86 を取得します。


<Platform>純粋な C# プロジェクトでは役に立たないことに注意してください。これは、C++ プロジェクトのビルド時に別のツールセットを使用する必要があり、32 ビットまたは 64 ビットのコンパイラとリンカーのいずれかを使用する必要があるため、C++ プロジェクトにとって非常に重要です。また、ARM コアのコンパイラ/リンカーは、Intel コアとは大きく異なります。これは C# には当てはまりません。まったく同じコンパイラを使用すると、まったく同じアセンブリが得られます。ジッタは、実行時にプロセッサ アーキテクチャを処理するものです。

違いを生む唯一のプロパティは<PlatformTarget>. AnyCPU特にクラス ライブラリ プロジェクトでは、常に を支持します。32 ビットのアンマネージ コードに依存していることがわかっている場合は、EXE プロジェクト (VS2012 以降では 32 ビットを優先) で使用することをお勧めします。x86しかし、これは難しい事実です。EXE をビルドするときに、AnyCPU と x86 を切り替えるオプションを用意しても意味がありません。

したがって、複数のプラットフォームを使用しても意味がありません。1 つだけで十分です。最終的にあなたの質問に対処するものであり、選択肢を排除するだけです.

于 2013-10-16T10:39:16.847 に答える