0

У меня есть файл визуальной студии, содержащий несколько проектов.Обновление конфигурации проектов Visual Studio для каждого проекта в файле решения Visual Studio

Для данной конфигурации решения, например Dev, некоторые из проектов используют конфигурацию Debug. Я хочу, чтобы все проекты использовали конфигурацию Dev для конфигурации решения Dev.

Вместо использования Configuration Manager и обновления конфигурации каждого проекта для всех возможных вариантов платформы (x64, Any CPU, Mixed Platforms), я хочу иметь возможность автоматизировать это. С помощью Configuration Manager очень утомительно обновлять эту конфигурацию для всех конфигураций решений для всех проектов.

Потому что у меня более 5 конфигураций решений, и в решении есть более 20 проектов.

Редактирование файла решения в блокноте ++ поможет мне догадаться. Я еще должен попробовать это. Но разве это единственный способ?

Update:

я подготовил простой PS сценарий для достижения этой цели с помощью Powershell для обновления Sln файла, для одной Sln конфигурации. Но ищем альтернативные способы.

$content = Get-Content "E:\SlnFolder\SolutionFile.sln" | ForEach-Object { 

$line = $_ 

if ($line -match "(^\s*{[a-zA-Z0-9]+-[a-zA-Z0-9]+-[a-zA-Z0-9]+-[a-zA-Z0-9]+-[a-zA-Z0-9]+}.Dev\|[a-zA-Z0-9\.\s]+ =)([a-zA-Z\s]+)") 
{ 

$line -replace "(^\s*{[a-zA-Z0-9]+-[a-zA-Z0-9]+-[a-zA-Z0-9]+-[a-zA-Z0-9]+-[a-zA-Z0-9]+}.Dev\|[a-zA-Z0-9\.\s]+ =)([a-zA-Z\s]+)",'$1Dev' 

} 
else 
{ 
$line 
} 

} | Set-Content -Path "E:\SlnFolder\SolutionFile_Updated.sln" 

Существует достаточно места для полировки этого скрипта. Будет проверять это.

+1

Альтернатива заключается в редактировании файлов через Microsoft.Build.BuildEngine, смотри, например, http://stackoverflow.com/questions/7887538/modify-programatically-csproj-files#8492560 – stijn

+0

@stijn - Ответ, обсуждаемый в приведенной вами теме, теперь устарел. Я нашел еще один поток [http://stackoverflow.com/questions/707107/parsing-visual-studio-solution-files], где есть ответ на новый способ использования Microsoft.Build.Construction.SolutionFile.Parse () с VS 2015. Путь MSBuild - это C: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ MSBuild \ v14.0 \ Microsoft.Build.dll –

+0

Я не уверен, что это действительно устарело? Обратите внимание, что это касается изменений * проектов *, вопрос, на который вы ссылаетесь, касается * решений *. Хотя для вашего дела вам, вероятно, нужны оба. – stijn

ответ

0

Да, вы можете получить все проекты AbsolutePath с помощью метода SolutionFile.Parse, вы можете использовать класс Microsoft.Build.Evaluation.Project для установки соответствующего свойства. Как это:

Пожалуйста, добавьте расширения использовать именованные Microsoft.Build

string solutionPath = @"D:\Project\Msbuild\App1\App1.sln"; 
var solutionFile = SolutionFile.Parse(solutionPath); 
foreach (var item in solutionFile.ProjectsInOrder) 
{ 
var project = ProjectCollection.GlobalProjectCollection.LoadProject(item.AbsolutePath); 
project.SetGlobalProperty("Configuration", "Debug"); 
project.Build(); 
} 
+0

Прохладный. Я быстро попробую это и обновить! –

+0

@ Baskar, а как насчет этой проблемы? Не могли бы вы получить полезную информацию от ответа Коула? Если это полезно для вас, помните, чтобы отметить его как ответ :) Имейте приятный день! –

+0

@ JackZhai-MSFT - я хочу иметь возможность просто обновлять sln-файл без загрузки соответствующего проекта. Это возможно? В основном я ищу API для Configuration Manager. В Visual Studio мы можем открыть Configuration Manager и обновить конфигурацию проектов для конфигурации sln. Этот вариант является утомительным, если у меня 15 проектов и более 5 или 6 slif conifgurations (например, Dev, Test, Prod, UAT и т. Д.). Ищете способ, чтобы иметь возможность просто обновлять sln-файл напрямую с помощью API для Configuration Manager. С помощью regex я мог бы напрямую обновлять sln. Но я скорее полагаюсь на API. –