2016-03-22 9 views
1

私はVisual Studioビルドシステムを使ってC#プロジェクトの出力ディレクトリにファイルをコピーしようとしています。このファイルはプラットフォーム(x86/x64)と構成(Debug/Release/...)の両方に依存しています。例えば、私はDebug|x64Release|x64ビルドのために異なるファイルを持っています。これを処理する方法は、ソリューションエクスプローラでプロジェクトにファイルを追加し、プロジェクトファイルを手動で編集することでした。

<ItemGroup> 
    <Content Include="$(SolutionDir)\data\$(Configuration)\$(Platform)\myfile.dat"> 
     <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> 
    </Content> 
</ItemGroup> 

私の考えは、ファイルmyfile.datはからコピーされたこと:私は、出力ディレクトリにmyfile.datという名前のファイルをコピーしたい場合 は例えば、私はC#プロジェクトファイル内のマクロの次のセットを記述します選択したビルドタイプに応じて、dataフォルダ内のサブフォルダの1つを選択します。

Solution folder 
| 
+--data 
    | 
    +--Release 
    | | 
    | +--x86 
    | | 
    | +--x64 
    | 
    +--Debug 
     | 
     +--x86 
     | 
     +--x64 

しかし$(Platform)マクロは常にそれがファイル参照パスの一部だとき、AnyCPUに評価され、いくつかの理由があります。実際には2つのマクロ$(Platform)$(PlatformName)があり、両方ともAnyCPUと評価されます。私はこれらのマクロの違いを説明しているドキュメントは見つけられません。 私はPre-build eventでこれらのマクロを評価しようとしましたが、正しい結果が得られました。 Pre-build eventを使用してファイルをコピーできますが、ファイル参照パスの一部として機能しないのはなぜか分かりません。これが機能するためには、プロジェクトファイルの別の部分を変更する必要がありますか?

UPDATE

PS。プロジェクトプラットフォームはx86またはx64のいずれかの値に設定されています。実際、AnyCPUプラットフォームは構成マネージャーから削除されます。

+0

愚かな質問がありますが、(アクセスを通じてソリューションエクスプローラでソリューションノードを右クリック)Configuration Managerで設定を確認していますか? – Lucero

+0

プロジェクトのプロパティを意味しますか?私はもちろんプラットフォームを変更しました。 – Max

+0

私はまさに私が書いたことを意味する...!プロジェクトプラットフォームは、各ソリューションプラットフォーム用に構成できます。これで、ソリューションプラットフォームを変更した場合、これが設定マネージャで正しく設定されていない限り、プロジェクトプラットフォームに影響するとは限りません。 – Lucero

答えて

0

$(Platform)は、おそらくプロジェクトのプロパティ>>ビルド>>プラットフォームがAnyCPUに設定されているため、AnyCPUと評価されています。これはPlatform targetとは異なります。 Build >> Configuration Manager >> Newから、正しいプラットフォーム名と設定で新しいプラットフォーム構成を作成できます。

以下は、同じことについて同様のSOの質問です。たぶん

How can you access the Visual Studio solution level platform from a C# project's build event?

Visual Studio macro/anything else to iterate through all projects and set project properties

+0

いいえ、プラットフォームがx86またはx64に設定されています – Max