c# - 可从代码访问的 C# 构建时间可设置值
问题描述
我有一个通过命令行构建的 C# 项目,我希望能够将一个值传递到构建中,以便它在运行时可用。
例如,如果我的应用程序有一个标签,并且我希望在调用 msbuild 时可以指定该标签的文本,我想使用一个命令来构建它,如下所示:
MSBuild MyProject.sln /p:MyCustomText="blue"
然后在运行时访问该值以设置标签文本,如下所示:
myLabel.text = MyCustomText
实现这一目标的最佳方法是什么?必须有一种方法可以做到这一点,而不会使预构建步骤和/或自定义 .cs 文件生成过于复杂。
解决方案
事实证明,只能将无价值标志传递给 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 文件使我的构建服务器修改起来相对容易,并且足够灵活,如果我需要,我可以在将来扩展它。
推荐阅读
- iis - 本地请求服务时 IIS 404 回复
- c# - 从 Form1_KeyPress 中的数字中分离多个数字
- codesourcery - 替换 Verifone DTK 的 Sourcery CodeBench
- javascript - 为什么 querySelector 不能在远程 wordpress 上工作(它在 localhost 上工作)
- vba - 在 PowerPoint 中使用 VBA 使用 LeftIndent 获取精确的英寸数
- c# - 使用 ICommand C# 将 UIElement 添加到 MainWindow
- javascript - 在javascript中使用set方法时如何在数组中累积特定的重复索引
- swift - 在 Swift/CoreData 中保存具有与日期相关的可变属性的数据结构的最佳方法
- javascript - 注册页面不会呈现
- javascript - 如何在 Vue.js 中显示 REST API 响应