2

Из Visual Studio Я могу создать несколько проектов, сгруппированных по папке с помощью правой кнопки мыши -> Сборка.Как создать папку VS-решения из powershell

Solution folder build command

Есть ли командной строки/мощность альтернативной оболочки для этого?

+0

msbuild.exe - ваш друг, не так ли? –

ответ

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 файл, чтобы найти папки

Update

следующий код будет разбирать 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 
} 
+0

В решении есть несколько сотен проектов, поэтому мне нужно развернуть сборку в одну конкретную папку, чтобы ускорить процесс. –

+0

@VladimirSachek Я добавил полный код в powershell –

1

Вы можете использовать DTE для получения путей проектов, а затем передать их в msbuild. Запустите это из консоли диспетчера пакетов (предположим, что msbuild находится в вашем% path%):

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

, это именно то, что мне нужно, но есть ли шанс запустить его за пределами Visual Studio? –

+0

@VladimirSachek Взгляните на [StudioShell] (https://studioshell.codeplex.com), иначе вы можете получить доступ к DTE извне VS без специального расширения. У меня есть код C#, поэтому дайте мне знать, если StudioShell не будет работать. – mtman

Смежные вопросы