【问题标题】:How to build VS solution folder from powershell如何从 powershell 构建 VS 解决方案文件夹
【发布时间】:2015-02-08 09:09:23
【问题描述】:

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

是否有任何命令行/power shell 替代方案?

【问题讨论】:

  • msbuild.exe 是你的朋友,不是吗?

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


【解决方案1】:

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

 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
}

【讨论】:

  • 解决方案中有数百个项目,这就是为什么我需要将构建范围限定到一个特定文件夹以加快进程。
【解决方案2】:

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

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

【讨论】:

  • 这正是我所需要的,但有没有机会在 Visual Studio 之外运行它?
  • @VladimirSachek 看看StudioShell,否则你可以从VS外部访问DTE,无需任何特殊扩展。我有一些 C# 代码,所以请告诉我,以防 StudioShell 无法工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多