在我的csharp代码中,我需要定义一个常量,其值在编译时期间从环境变量扩展设置。
在这个例子中,我们来谈谈任意字符串,例如“Hello World”。
对于c ++,似乎有各种方法。请参阅以下答案,例如:https://stackoverflow.com/a/22828929
令人惊讶的是我无法为csharp找到类似的解决方案 特别是,似乎无法相应地调整“* .csproj”文件?
PS:
“DefineConstants”有一些逻辑,但它们只给你一些布尔标志,所以你可以在源代码中使用条件语句,如“#if TESTFOO”。您将无法使用环境变量的实际值。
以下答案中描述了一种可能的“解决方法”(以动态生成其他源文件),例如:https://stackoverflow.com/a/4453285
但我仍在寻找一种更直接的官方解决方案。
答案 0 :(得分:7)
C#构建系统不支持强烈使用环境变量。在C ++构建中有些不可避免,它的构建模型可以追溯到20世纪70年代,但微软为C#传递了它。当您在完成项目后尝试重建应用程序一年或更长时间时,它确实有一个很棒的诀窍来导致构建中断。或者当您尝试在另一台计算机上构建并且未正确设置其环境时快速。将所有构建配置集中在一个地方是最好的解决方案。
但MSBuild支持它们,您可以在.csproj文件中引用$(NAME)
的环境变量。例如,您可以使用它设置条件编译符号,即在#if
表达式中测试的类型。这需要手动编辑.csproj文件,使用像记事本这样的文本编辑器。找到<DefineConstants>
元素,通常有两个。一个用于Debug构建,另一个用于Release构建。一个愚蠢的例子:
<DefineConstants>DEBUG;TRACE;$(USERNAME)</DefineConstants>
并使用如下:
static void Main(string[] args) {
#if hpassant
Console.WriteLine("It's mine!");
#endif
Console.ReadLine();
}
哎呀,测试一下它会发现它在IDE中工作正常:)项目+属性,构建选项卡,条件编译符号= $(USERNAME)。好的。
答案 1 :(得分:0)