我使用CAKE 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
个文件?
答案 0 :(得分:5)
目前,在脚本加载方面没有条件限制支持0.23.0将添加如果def支持但预处理器指令被处理为相同级别/优先级因此不会帮助解决您的特定问题
你可以做的是创建一个小的bootstrapper蛋糕脚本,它可以提取你特定场景所需的部分。
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或没有指定参数,那么它将加载
如果参数VisualStudioVersion设置为2013,那么它将加载
也许不那么复杂只是提供给不同的入口点,即build.cake
文件调用vs2013.cake
或vs2017.cake
,具体取决于参数。
Information("This will execute regardless version!") ;
#load "common.cake"
Information("Hello VS2013!");
#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));
}
cake .\executescript.cake
将输出
This will execute regardless version!
Hello VS2017!
cake .\executescript.cake --VisualStudioVersion=2013
将输出
This will execute regardless version!
Hello VS2013!