c# - 我可以从 csharp 中的编译时环境变量创建常量吗?

标签 c# environment-variables compile-time

我们使用 Hudson来构建我们的项目,Hudson 在编译时方便地定义环境变量,如“%BUILD_NUMBER%”。

我想在代码中使用该变量,这样我们就可以做一些事情,比如在运行时记录这是什么构建。但是我不能做 System.Environment.GetEnvironmentVariable 因为那是访问运行时环境,我想要的是这样的:

#define BUILD_NUM = %BUILD_NUMBER%

const string BUILD_NUM = %BUILD_NUMBER%

除非我不知道语法。有人可以指出我正确的方向吗?谢谢!

最佳答案

好的,这就是我最后要做的。它不是很优雅,但它确实有效。我创建了一个如下所示的预构建步骤:

echo namespace Some.Namespace > "$(ProjectDir)\CiInfo.cs"
echo { >> "$(ProjectDir)\CiInfo.cs"
echo     ///^<summary^>Info about the continuous integration server build that produced this binary.^</summary^> >> "$(ProjectDir)\CiInfo.cs"
echo     public static class CiInfo >> "$(ProjectDir)\CiInfo.cs"
echo     { >> "$(ProjectDir)\CiInfo.cs"
echo         ///^<summary^>The current build number, such as "153"^</summary^> >> "$(ProjectDir)\CiInfo.cs"
echo         public const string BuildNumber = ("%BUILD_NUMBER%" == "" ? @"Unknown" : "%BUILD_NUMBER%"); >> "$(ProjectDir)\CiInfo.cs"
echo         ///^<summary^>String of the build number and build date/time, and other useful info.^</summary^> >> "$(ProjectDir)\CiInfo.cs"
echo         public const string BuildTag = ("%BUILD_TAG%" == "" ? @"nohudson" : "%BUILD_TAG%") + " built: %DATE%-%TIME%"; >> "$(ProjectDir)\CiInfo.cs"
echo     } >> "$(ProjectDir)\CiInfo.cs"
echo } >> "$(ProjectDir)\CiInfo.cs"

然后我将“CiInfo.cs”添加到项目中,但在版本控制中忽略了它。这样我就永远不必编辑或提交它,并且该项目始终有一个常量可用,即最新的构建号和时间。

关于c# - 我可以从 csharp 中的编译时环境变量创建常量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4450231/

相关文章:

c# - 使用 HMACSHA 在 .NET Standard 2.0 中签署消息

ruby-on-rails - RAILS_ENV vs Rails.env?为什么值不同?

python - 为什么python中设置的环境变量不能持久化?

c# - C# 中的编译时反射

c# - 使用装饰器模式有条件地替换行为而不是扩展

c# - 应用程序在虚拟应用程序 (IIS) 中运行时缺少程序集引用

c# - 如何在C#或CS1503中使用通用变量

node.js - Node中的 `process.env.USER`和 `process.env.USERNAME`有什么区别?

c++ - 具有成员变量的 Const 对象数组 = 先前索引成员变量的总和

c++ - 是否可以使用 c++11 中的模板元编程创建一个填充大小为 N 的零的 vector