如何创建条件编译符号而不需要创建新的构建配置来使用它?

问题描述 投票:0回答:1

完整上下文:我正在 .NET MAUI 中构建一个应用程序(适用于 Android、iOS 和 Windows)。在 Windows 上,我希望拥有多种不同的版本,例如:一种可以访问 Microsoft Store 的版本,一种可以访问 Steam 的版本,一种可以访问 Epic Games 的版本。每个商店都有自己的 SDK 和定制代码,我想以不同的方式构建它们(例如为 Windows 应用商店打包,为 Steam/Epic 解包)。

我想定义一个预处理器指令/条件编译符号/常量,它允许我只运行目标风格的特定代码。例如,我希望能够拥有仅在 Steam 版本上运行的自定义代码:

#if STEAM
// custom Steam code
#endif

然后,我希望能够(在构建管道中)以发布模式构建 Steam 版本。我想对我拥有的所有口味做同样的事情。但是,我真的不确定如何利用这些常量而不需要为每个常量创建构建配置。我想避免出现许多重复的构建配置和带有复制粘贴设置的混乱 .csproj 的情况。我不想想要:

  • 调试
  • 发布
  • 调试Steam
  • 释放Steam
  • 调试史诗
  • 发布史诗
  • 调试痒
  • 释放痒
  • 等等

我认为我很容易犯错误,并且必须在这些之间切换感觉不对。

目前,我只有Windows项目中的所有代码+依赖项。我正在注释/取消注释位来测试,但对于长期可维护性或管道而言,它并不真正可行。

我的目标是仅具有“调试”和“发布”模式配置。然后,在我的管道上,我可以选择在 Android/iOS/Windows 之间进行构建(目前正在运行)。然后,我想在 Windows 上进一步配置是否以 Windows Store/Steam/Epic 为目标,并包含正确的附加代码和正确的 NuGet 包。

.net maui pipeline csproj preprocessor-directive
1个回答
0
投票
<PropertyGroup>    
      <Configurations>Debug;Release;DebugSteam</Configurations> 
</PropertyGroup>

<PropertyGroup Condition="'$(Configuration)' == 'DebugSteam'">
      <DefineConstants>STEAM</DefineConstants>
</PropertyGroup>
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.