背景
在开发一个大型.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 = @( {你的解决方案文件路径数组} )
|