Cake - Build with MSBuild

要使用 Cake 透過 MSBuild 建置方案,可以參閱 Cake 內使用 MSBuild 的方式。


調用上就是帶入方案檔即可,如有需要設定再帶入設定值而已。


所以建置的腳本寫起來會像下面這樣,先帶入方案檔的位置找到對應的方案檔,遍尋方案檔調用 MSBuild,如有需要則加帶設定,像是是否要將緊告示為錯誤、或是設定是要建置 Debug 或是 Release 等。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var solutions = GetFiles("../**/*.sln");
...
Task("Build")
.Does(() => {
foreach(var solution in solutions)
{
...
MSBuild(solution, settings =>
settings.SetPlatformTarget(PlatformTarget.MSIL)
.WithProperty("TreatWarningsAsErrors","true")
.WithTarget("Build")
.SetConfiguration(configuration));
}
});
...


Cake 任務運行後。



輸出目錄就會看到建置出來的檔案。



最後附上完整的 Cake 腳本。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
var solutions = GetFiles("../**/*.sln");

///////////////////////////////////////////////////////////////////////////////
// ARGUMENTS
///////////////////////////////////////////////////////////////////////////////
var target = Argument("target", "Default");
var configuration = Argument("configuration", "Release");

///////////////////////////////////////////////////////////////////////////////
// SETUP / TEARDOWN
///////////////////////////////////////////////////////////////////////////////

Setup(ctx =>
{
// Executed BEFORE the first task.
Information("Running tasks...");
});

Teardown(ctx =>
{
// Executed AFTER the last task.
Information("Finished running tasks.");
});

///////////////////////////////////////////////////////////////////////////////
// TASKS
///////////////////////////////////////////////////////////////////////////////

Task("Build")
.Does(() => {
foreach(var solution in solutions)
{
Information("Building {0}", solution);
MSBuild(solution, settings =>
settings.SetPlatformTarget(PlatformTarget.MSIL)
.WithProperty("TreatWarningsAsErrors","true")
.WithTarget("Build")
.SetConfiguration(configuration));
}
});

Task("Default")
.IsDependentOn("Build")
.Does(() => {
});

RunTarget(target);