目前在脚本加载方面还不支持条件语句。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!