【问题标题】:Possible to pass a constant to C# compiler in build script可以在构建脚本中将常量传递给 C# 编译器
【发布时间】:2016-07-20 10:00:29
【问题描述】:

我有一个类似这样的 C# 文件:

public const string QueueName = "abc";

我想构建应用程序多次切换这个值。不能将 QueueName 更改为编译时常量以外的任何内容。

是否有任何方法可以将“预编译器”变量传递给此声明,该变量可以在构建配置或构建脚本中更改?

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

【问题讨论】:

  • 您可以使用此常量创建一个 .cs 文件,这是编译的一部分,只需添加一个在编译前修改文件的构建步骤。
  • 您可以使用 T4 模板为您的常量生成代码。在 T4 模板中,它可以读取环境变量、文件或.... 以获取要放入字符串的值。

标签: c# build precompile


【解决方案1】:

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

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

代码类似于:

   <#@ 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";
}

【讨论】:

    【解决方案2】:

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

    我认为它比 T4 看起来更干净,但实际上这是个人喜好。

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

    【讨论】:

      猜你喜欢
      • 2015-10-19
      • 1970-01-01
      • 2019-10-03
      • 1970-01-01
      • 2012-12-02
      • 1970-01-01
      • 2011-11-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多