当前位置: 首页 > 编程语言 > C#

我可以在csharp中从编译时环境变量创建常量吗?

时间:2023-04-10 18:53:01 C#

我可以在csharp中从编译时环境变量创建常量吗?我们使用Hudson来构建我们的项目,Hudson在编译时方便地定义环境变量,如“%BUILD_NUMBER%”。我想在代码中使用该变量,因此我们可以在运行时记录这是什么构建。但我不能做System.Environment.GetEnvironmentVariable因为那是访问运行时环境,我想要的是这样的:#defineBUILD_NUM=%BUILD_NUMBER%或conststringBUILD_NUM=%BUILD_NUMBER%除了我不知道语法。有人能指出我正确的方向吗?谢谢!好的,这就是我的工作。它不是很优雅,但它确实有效。我创建了一个这样的预构建步骤:echonamespaceSome.Namespace>"$(ProjectDir)CiInfo.cs"echo{>>"$(ProjectDir)CiInfo.cs"echo///^Infoaboutthecontinuousintegrationserverbuild产生了这个二进制文件。^>>"$(ProjectDir)CiInfo.cs"echopublicstaticclassCiInfo>>"$(ProjectDir)CiInfo.cs"echo{>>"$(ProjectDir)CiInfo.cs"echo//^当前版本号,例如"153"^>>"$(ProjectDir)CiInfo.cs"echopublicconststringBuildNumber=("%BUILD_NUMBER%"==""?@"Unknown":"%BUILD_NUMBER%");>>"$(ProjectDir)CiInfo.cs"echo///^构建编号和构建日期/时间的字符串,以及其他有用的信息。^>>"$(ProjectDir)CiInfo.cs"echopublicconststringBuildTag=("%BUILD_TAG%"==""?@"nohudson":"%BUILD_TAG%")+"建造:%DATE%-%TIME%";>>"$(ProjectDir)CiInfo.cs"echo}>>"$(ProjectDir)CiInfo.cs"echo}>>"$(ProjectDir)CiInfo.cs"然后我将"CiInfo.cs"添加到项目中,但是它被版本控制忽略了。这样我就不必编辑或提交它,而且项目总是有一个常量可用,最新的构建号和时间。一种方法是在编译前添加一个构建步骤,在%BUILD_NUMBER%处的相应源文件中执行正则表达式替换。define不允许您像在C/C++中那样在C#中定义内容。从这个页面:#define指令不能用于声明常量值,这通常在C和C++中完成。C#中的常量最好定义为类或结构的静态成员。如果您有多个这样的常量,请考虑创建一个单独的“常量”类来保存它们。如果您希望在AssemblyInfo类中反映内部版本号,大多数构建工具都支持在构建时生成该类。MSBuild有一项任务。与NAnt相同。不知道哈德森是怎么做到的。一种可能是使用T4生成配置类,并实例化所有常量。T4很好地集成到MSVS中,消除了您自己的自定义构建步骤的需要。以上是C#学习教程:CanIcreateaconstantfromacompile-timeenvvariableincsharp?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: