我正在 Visual Studio 中创建一个 C# 解决方案,我希望某些项目的行为略有不同,具体取决于活动解决方案平台的设置。在配置管理器中参见下面:
基本上在一些 .csproj 文件中,我想根据活动解决方案平台引用不同的资源项目,有点像这样:
<ItemGroup Condition="'$(Platform)'=='x86'">
<ProjectReference Include="..\Resources.x86\Resources.x86.csproj" />
</ItemGroup>
<ItemGroup Condition="'$(Platform)'=='x64'">
<ProjectReference Include="..\Resources.x64\Resources.x64.csproj" />
</ItemGroup>
上述问题是我的代码本身不是特定于平台的,因此所有项目都将编译为 AnyCPU,因此
$(Platform)
值将不会反映活动解决方案平台。
是否还有另一个
$
变量可以用来获取活动解决方案平台而不是为项目选择的平台?或者也许有一种方法可以将自定义变量附加到配置管理器来反映我想要的值?
如果我通过命令行运行构建,这会很容易,然后我可以只传递类似
/p:ResourceProjectPath=..\Resources.x64\Resources.x64.csproj
的内容,但在 VS 中执行似乎更尴尬。
不,没有这样的变量。
查看这个官方文档:
由此可知普通变量无法获取该值。
其他宏将能够检查C++项目属性(只有CPP项目有此接口来检查所有变量。):
在这个地方,你会知道没有内置变量来实现这一点。
然后如果你查看解决方案内容,你会发现没有地方以明文形式存储这些信息(.sln只有所有平台,没有显示活动平台。)。
我找到了一种或许能够获取这些未公开信息的方法:
dte.Solution.SolutionBuild.ActiveConfiguration
无论如何,这不是通过简单的 csproj 结构就能实现的。