有条件地加载 .cake 文件

5

我使用的是CAKE 0.22.0版本。

根据传递给 build.cake 的参数,我想要加载不同的.cake文件。例如,如果参数 VisualStudioVersion 的值为2013,则我想要加载 vs2013dlls.cake 文件;如果它的值为2015,那么我想要加载 vs2015dlls.cake 文件;等等。

查看 CAKE预处理器指令 页面时,我没有看到任何有关预处理器关键字(如#if#else)的信息。

我希望不要将其他.cake文件的内容复制到build.cake中,以免build.cake变得太臃肿。

如何在特定条件下有条件地加载.cake文件呢?

1个回答

8

目前在脚本加载方面还不支持条件语句。0.23.0版本将增加if def支持,但预处理器指令被处理为相同级别/优先级,因此对于您的特定问题没有帮助。

但您可以创建一个小的启动脚本来拉取需要的部分以满足您的特定场景。

使用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.cake或vs2017.cake。
common.cake
Information("This will execute regardless version!") ;

vs2013.cake

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

vs2017.cake

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

build.cake

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

将输出

无论版本如何都会执行!

你好,VS2017!

2013 输出

cake .\executescript.cake --VisualStudioVersion=2013

将输出

无论版本如何,都会执行此操作!

你好VS2013!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接