私はVisual Studioビルドシステムを使ってC#プロジェクトの出力ディレクトリにファイルをコピーしようとしています。このファイルはプラットフォーム(x86/x64)と構成(Debug/Release/...)の両方に依存しています。例えば、私はDebug|x64
とRelease|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
プラットフォームは構成マネージャーから削除されます。
愚かな質問がありますが、(アクセスを通じてソリューションエクスプローラでソリューションノードを右クリック)Configuration Managerで設定を確認していますか? – Lucero
プロジェクトのプロパティを意味しますか?私はもちろんプラットフォームを変更しました。 – Max
私はまさに私が書いたことを意味する...!プロジェクトプラットフォームは、各ソリューションプラットフォーム用に構成できます。これで、ソリューションプラットフォームを変更した場合、これが設定マネージャで正しく設定されていない限り、プロジェクトプラットフォームに影響するとは限りません。 – Lucero