首页 > 解决方案 > 可从代码访问的 C# 构建时间可设置值

问题描述

我有一个通过命令行构建的 C# 项目,我希望能够将一个值传递到构建中,以便它在运行时可用。

例如,如果我的应用程序有一个标签,并且我希望在调用 msbuild 时可以指定该标签的文本,我想使用一个命令来构建它,如下所示:

MSBuild MyProject.sln /p:MyCustomText="blue"

然后在运行时访问该值以设置标签文本,如下所示:

myLabel.text = MyCustomText

实现这一目标的最佳方法是什么?必须有一种方法可以做到这一点,而不会使预构建步骤和/或自定义 .cs 文件生成过于复杂。

标签: c#

解决方案


事实证明,只能将无价值标志传递给 C# 构建......

#if MY_COMPILATION_FLAG
// flag specific code
#endif

因此,为了解决这个问题,我为我的项目(项目属性 -> 构建事件 -> 预构建事件命令行)创建了一个预构建脚本,该脚本使用 JSON 清单文件生成 C# 源文件。

例如,以下预构建命令行将执行一个 powershell 脚本来将我的 JSON 文件转换为 C# 源文件:

powershell -NoProfile -ExecutionPolicy RemoteSigned -file "$(SolutionDir)code-generation\scripts\generate-code.ps1" -ManifestFilepath "$(SolutionDir)code-generation\manifests\build-properties.json"

以这种方式使用 JSON 文件使我的构建服务器修改起来相对容易,并且足够灵活,如果我需要,我可以在将来扩展它。


推荐阅读