可以在构建脚本中将常量传递给 C# 编译器

Possible to pass a constant to C# compiler in build script

我有一个 C# 文件,内容如下:

public const string QueueName = "abc";

而且我想多次构建应用程序,每次都切换这个值。无法将 QueueName 更改为编译时常量以外的任何内容。

有什么方法可以将 'pre-compiler' 变量传递给可以在构建配置或构建脚本中更改的此声明?

我用谷歌搜索了它,但似乎找不到任何解决方案。

由于这些是常量,您可以考虑使用 code generation with a T4 template 在单独的 class 文件中生成常量和值 on build

此 class 文件中的正确常量值可以来自数组、数据库或其他外部源。

代码类似于:

   <#@ output extension=".cs" #>
    <#
       using(SampleContext context = new SampleContext)
       {
       string queuename = context.Queuename.FirstOrDefault();
       }
    #>
    internal class NotSoConstantConstants
    {
       public const string QueueName = "<#= queuename #>";
    }

可以输出到:

internal class NotSoConstantConstants
{
  public const string QueueName = "abc";
}

我最近创建了一个工具来执行此操作,它允许在构建时注入环境变量。

我认为这是比 T4 更简洁的解决方案,但实际上这是个人喜好。

查看项目https://github.com/bonyjoe/EnvVariableInject