Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can I make a constant from a compile-time env variable in csharp?

Tags:

We use Hudson to build our projects, and Hudson conveniently defines environment variables like "%BUILD_NUMBER%" at compile time.

I'd like to use that variable in code, so we can do things like log what build this is at run time. However I CAN NOT do System.Environment.GetEnvironmentVariable because that is accessing the run-time environment, what I want is something like:

#define BUILD_NUM = %BUILD_NUMBER% 

or

const string BUILD_NUM = %BUILD_NUMBER% 

Except I don't know the syntax. Can someone please point me in the right direction? Thanks!

like image 858
Eggplant Jeff Avatar asked Dec 15 '10 13:12

Eggplant Jeff


People also ask

How do you declare a constant variable in C#?

Use the const keyword in C# The const (read: constant) keyword in C# is used to define a constant variable, i.e., a variable whose value will not change during the lifetime of the program. Hence it is imperative that you assign a value to a constant variable at the time of its declaration.

What is a compile-time constant C#?

A variable in C# can be made into a compile-time constant by adding the const keyword before the data type. This modifier means that the variable cannot be changed and it must therefore be assigned a value at the same time as it is declared.

Can we change the value of constant variable in C#?

constants are absolute constants in which their value cannot be changed or assigned at the run time. constant variables are compile time variables.


1 Answers

Okay here's what I wound up doing. It's not very elegant, but it works. I created a pre-build step that looks like this:

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" 

Then I added "CiInfo.cs" to the project, but ignored it from version control. That way I never have to edit it or commit it, and the project always has a constant available that is the latest build number and time.

like image 59
Eggplant Jeff Avatar answered Sep 25 '22 03:09

Eggplant Jeff