有没有办法知道 Visual Studio 中的活动解决方案平台?

Is there a way to know the active solution platform in Visual Studio?

提问人:george7378 提问时间:9/28/2023 更新时间:9/28/2023 访问量:79

问:

我正在 Visual Studio 中创建一个 C# 解决方案,我希望在某些项目中的行为略有不同,具体取决于活动解决方案平台的设置。请参阅下面的配置管理器:

Configuration manager

基本上,在一些.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)

是否有另一个变量可用于获取活动解决方案平台,而不是为项目选择的平台?或者,也许有一种方法可以将自定义变量附加到配置管理器,以反映我想要的值?$

如果我通过命令行运行构建,这将很容易,然后我可以传入类似的东西,但从 VS 中执行似乎更尴尬。/p:ResourceProjectPath=..\Resources.x64\Resources.x64.csproj

C# Visual-Studio MSBuild 项目 预处理器

评论

2赞 gunr2171 9/28/2023
您可以进行自己的配置,而不是默认的“调试”和“发布”。
0赞 Bowman Zhu-MSFT 9/28/2023
@george7378 嗨,你可以看看我的回答。:)

答:

1赞 Bowman Zhu-MSFT 9/28/2023 #1

不,没有这样的变量。

查看此官方文件:

常见宏列表

由此,您将知道无法获得此值的常见变量。

而其他宏将能够签入 C++ 项目属性(只有 CPP 项目有这个接口来检查所有变量)。

enter image description here

在这个地方,您将知道没有内置变量来实现这一点。

然后,如果检查解决方案内容,会发现没有以明文形式存储此信息的地方(.sln 只有所有平台,没有显示活动平台。

我找到了一种可能能够获得这些未公开信息的方法:

DTE。Solution.SolutionBuild.ActiveConfiguration

无论如何,这不是通过简单的 csproj 结构可以实现的。

评论

0赞 george7378 9/28/2023
是的,看起来你是对的 - 我可以使用一组自定义配置,就像其他评论建议的那样,只查看 $(Configuration) 值,但最终我决定专门为 x86 或 x64 编译,而不是使用 AnyCPU。