【发布时间】:2015-02-08 09:09:23
【问题描述】:
在 Visual Studio 中,我可以通过右键单击 -> 构建来构建多个按解决方案文件夹分组的项目。
是否有任何命令行/power shell 替代方案?
【问题讨论】:
-
msbuild.exe 是你的朋友,不是吗?
标签: .net visual-studio powershell command-line build-automation
在 Visual Studio 中,我可以通过右键单击 -> 构建来构建多个按解决方案文件夹分组的项目。
是否有任何命令行/power shell 替代方案?
【问题讨论】:
标签: .net visual-studio powershell command-line build-automation
在上面的屏幕截图中,只需执行以下操作:
cd [directory with WindowsFormsApplication1.sln]
C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe
Powershell 只是“控制台”。要构建 sln 或 csproj,您需要 msbuild.exe 这是构建 .NET 项目的工具
如果您只想从 sln 构建一个解决方案文件夹,这并不容易,因为 Visual Studio 中的文件夹是虚拟的,您需要解析 sln 文件来查找文件夹
更新
以下代码将解析 sln 文件并为属于文件夹的项目运行 msbuild:
param([string]$slnPath=".\YourSLN.sln", [string]$VsFolderName="Your_folder")
$slnContent = Get-Content $slnPath
$folderLine = $slnContent | ?{$_.Contains("2150E333-8FDC-42A3-9474-1A3956D46DE8")} | ?{$_.Contains($VsFolderName)}
$guid = $folderLine.Split(", ")[-1].Replace('"',"")
#Write-host $guid
$csprojGuids = $slnContent | ?{$_.Contains("= "+$guid)} | %{$_.Split("=")[-2].Trim()}
#Write-Host $csprojGuids
for($i=0; $i -lt $csprojGuids.count; $i++){
$toFind = $csprojGuids[$i]
$def = $slnContent | ?{$_.Contains("Project")} | ?{$_.Contains($csprojGuids[$i])} | %{$_.Split(",")[-2].Trim().Replace('"','')}
Write-Host "building" $def
C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe $def
}
【讨论】:
您可以使用 DTE 获取项目的路径,然后将它们传递给 msbuild。从包管理器控制台运行它(假设 msbuild 在你的 %path% 中):
project|% dte|% solution|? projectname -eq NewFolder1|% projectitems|% object|% {msbuild $_.fullname}
【讨论】: