cakebuild - 有条件地加载 .cake 文件

标签 cakebuild

我使用蛋糕 0.22.0。

取决于传入 build.cake 的参数, 我要加载不同的 .cake文件。例如,如果参数 VisualStudioVersion具有值 2013 , 我要加载 vs2013dlls.cake文件;如果它具有值 2015 ,然后我想加载 vs2015dlls.cake文件;等等。

看着 the CAKE page on preprocessor directives ,我没有看到有关预处理器关键字的任何信息,例如 #if#else .

我宁愿不复制其他 .cake 的内容文件到 build.cake , 以免 build.cake变得过于臃肿。

我如何加载 .cake有条件的文件?

最佳答案

目前在脚本加载时不支持条件,如果 def 支持,0.23.0 将添加,但预处理器指令被处理为相同的级别/优先级,因此对您的特定问题没有帮助。

不过,您可以做的是创建一个小的 bootstrap 蛋糕脚本,该脚本可以为您的特定场景提供所需的片段。

使用 CakeExecuteExpression 的示例

var visualStudioVersion = Argument("VisualStudioVersion", "2017");
var statements = new List<string>();
var currentDir = MakeAbsolute(Directory("./"));

statements.Add("#load \"{0}/common.cake\"");
switch(visualStudioVersion)
{
    case "2013":
        statements.Add("#load \"{0}/vs2013.cake\"");
        break;
    case "2017":
        statements.Add("#load \"{0}/vs2017.cake\"");
        break;
    default:
    throw new Exception(string.Format("Unknown VisualStudioVersion: {0}", visualStudioVersion));
}

var expression = string.Format(
                    string.Join(
                        "\r\n",
                        statements
                        ),
                    currentDir
                    );

CakeExecuteExpression(
    expression
);

对于上述,如果参数 VisualStudioVersion 设置为 2017 或未指定参数,则它将加载
  • common.cake
  • vs2017.cake

  • 如果参数 VisualStudioVersion 设置为 2013 则它将加载
  • common.cake
  • vs2013.cake

  • 使用 CakeExecuteScript 的示例

    也许不那么复杂的是只提供不同的入口点,即有一个 build.cake文件调用 vs2013.cakevs2017.cake取决于论点。

    普通蛋糕
    Information("This will execute regardless version!") ;
    

    vs2013.cake
    #load "common.cake"
    Information("Hello VS2013!");
    

    vs2017.cake
    #load "common.cake"
    Information("Hello VS2017!");
    

    构建蛋糕
    var visualStudioVersion = Argument("VisualStudioVersion", "2017");
    
    switch(visualStudioVersion)
    {
        case "2013":
            CakeExecuteScript("vs2013.cake");
            break;
        case "2017":
            CakeExecuteScript("vs2017.cake");
            break;
        default:
        throw new Exception(string.Format("Unknown VisualStudioVersion: {0}", visualStudioVersion));
    }
    

    2017年产量
    cake .\executescript.cake
    

    会输出
    This will execute regardless version!Hello VS2017!
    2013年产量
    cake .\executescript.cake --VisualStudioVersion=2013
    

    会输出
    This will execute regardless version!Hello VS2013!

    关于cakebuild - 有条件地加载 .cake 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46648455/

    相关文章:

    cakebuild - 如何使用cakebuild比较修改的文件日期?

    c# - 使用 Cake 从网络驱动器安装 Nuget 包

    c# - 文件packages.config.md5sum的用途

    c# - 是否可以从 Cake 任务中调用 powershell 命令

    c# - 如何添加特定的cake包在windows下运行

    c# - 生成 Nunit 和 Specflow 报告的 Cake 构建

    c# - Cake (C# make) 在 build.cake 中使用 .Net Framework 方法

    c# - 0.15.2 中 GetFiles 的重大变化无法排除文件夹

    .net - 使用混合 .NET Core 和框架解决方案的 Azure Devops 中的 Cake 构建脚本失败