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