我正在尝试使Visual Studio构建系统将文件复制到C#项目的输出目录。此文件依赖于平台(x86 / x64)和配置(调试/发布/ ...)。例如,我有Debug|x64
和Release|x64
版本的不同文件。我想要处理的方法是在解决方案资源管理器中向项目添加一个文件并手动编辑项目文件。
例如,如果我想将名为myfile.dat
的文件复制到输出目录,我会在C#项目文件中编写以下一组宏:
<ItemGroup>
<Content Include="$(SolutionDir)\data\$(Configuration)\$(Platform)\myfile.dat">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
我的想法是,文件myfile.dat
将从data
文件夹中的一个子文件夹中复制,具体取决于所选的构建类型。
Solution folder
|
+--data
|
+--Release
| |
| +--x86
| |
| +--x64
|
+--Debug
|
+--x86
|
+--x64
但由于某种原因,$(Platform)
宏始终评估为AnyCPU
,当它是文件引用路径的一部分时。实际上有两个宏$(Platform)
和$(PlatformName)
,它们都评估为AnyCPU
。我找不到任何描述这些宏之间差异的文档。
我还尝试在Pre-build event
中评估这些宏,然后它给出了正确的结果。
我知道我可以使用Pre-build event
来复制文件,我只是好奇为什么它不能作为文件引用路径的一部分工作。是否需要更改项目文件的另一部分才能使其正常工作?
更新
PS。项目平台的值设置为x86
或x64
。事实上,AnyCPU
平台已从配置管理器中删除。
答案 0 :(得分:0)
$(Platform)
正在评估AnyCPU
,因为您的项目属性&gt;&gt; Build&gt;&gt;平台设置为AnyCPU
。请注意,这与Platform target
不同。您可以使用正确的平台名称和设置从Build&gt;&gt; Configuration Manager&gt;&gt; New创建新的平台配置。
以下是关于同样事情的类似问题。
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
答案 1 :(得分:0)
$(PlatformTarget)
正是您所需要的。它返回正确的 AnyCPU
、x86
或 x64
。确保测试 AnyCPU
条件,因为它与 x86
相同。例如:
Condition=" '$(PlatformTarget)' == 'x86' Or '$(PlatformTarget)' == 'AnyCPU' "