0%

记录一个简单但很有用的Powershell脚本

背景

在开发一个大型.Net系统时,可能会需要根据项目类型拆分为多个.sln解决方案,以避免单个解决方案包含数十个项目带来的开发和管理上的困难,典型如系统包含底层库和下游应用的复杂系统。但是Visual Studio对跨解决方案的项目引用场景支持并不是特别完善,我们可选择使用脚本来对整个项目进行完整的编译操作。

思路

借鉴Abp框架源码中的脚本文件,我们可以使用Powershell命令,遍历所有.sln解决方案,并对每个解决方案调用dotnet build。

编码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$solutionPaths = @(
{你的解决方案文件路径数组}
)

foreach ($solutionPath in $solutionPaths) {
$solutionAbsPath = (Join-Path $rootFolder $solutionPath)
Set-Location $solutionAbsPath
dotnet build
if (-Not $?) {
Write-Host ("Build failed for the solution: " + $solutionPath)
Set-Location $rootFolder
exit $LASTEXITCODE
}
}

Set-Location $rootFolder

为了更好的管理,还可以建立一个单独的Powershell存放各解决方案的路径字符串:

(build-all.ps1)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$full = $args[0] 

. ".\common.ps1" $full

Write-Host $solutionPaths

foreach ($solutionPath in $solutionPaths) {
$solutionAbsPath = (Join-Path $rootFolder $solutionPath)
Set-Location $solutionAbsPath
dotnet build
if (-Not $?) {
Write-Host ("Build failed for the solution: " + $solutionPath)
Set-Location $rootFolder
exit $LASTEXITCODE
}
}

Set-Location $rootFolder

(common.ps1)

1
2
3
4
5
6
7
$full = $args[0]

$rootFolder = (Get-Item -Path "./" -Verbose).FullName

$solutionPaths = @(
{你的解决方案文件路径数组}
)