如何从PowerShell构建VS解决方案文件夹

时间:2014-12-10 08:39:58

标签: .net visual-studio powershell command-line build-automation

从Visual Studio我可以通过右键单击 - >构建按解决方案文件夹分组的多个项目。建立。

Solution folder build command

是否有替代命令行/电源shell?

2 个答案:

答案 0 :(得分:3)

在上面的屏幕截图中,只需执行以下操作:

 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
}

答案 1 :(得分:1)

您可以使用DTE获取项目路径,然后将它们传递给msbuild。从程序包管理器控制台运行此命令(假设msbuild在您的%path%中):

project|% dte|% solution|? projectname -eq NewFolder1|% projectitems|% object|% {msbuild $_.fullname}