如何使用PowerShell构建Visual Studio解决方案文件夹

5

从Visual Studio中,我可以通过右键单击 -> 构建来构建几个项目,这些项目被分组到解决方案文件夹中。

Solution folder build command

是否有任何命令行/PowerShell替代方法?


msbuild.exe是你的好朋友,不是吗? - David Brabant
2个回答

6
在上面的截图中,请按以下步骤操作:
 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
}

解决方案中有数百个项目,因此我需要将构建范围限定在一个特定的文件夹中以加快进程。 - Vladimir Sachek

1
您可以使用DTE获取项目的路径,然后将其传递给msbuild。从包管理器控制台运行此命令(假设msbuild在您的%path%中):
project|% dte|% solution|? projectname -eq NewFolder1|% projectitems|% object|% {msbuild $_.fullname}

这正是我所需要的,但有没有可能在 Visual Studio 之外运行它? - Vladimir Sachek
@VladimirSachek 请查看StudioShell,否则您可以在不使用任何特殊扩展的情况下从VS外部访问DTE。我有一些C#代码,所以如果StudioShell不起作用,请告诉我。 - Mark Toman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接