0

J'ai un fichier de solution de studio visuel contenant plusieurs projets.Mise à jour de la configuration des projets Visual Studio pour chaque projet dans le fichier de solution Visual Studio

Pour une configuration de solution donnée, disons par exemple Dev, peu de projets utilisent la configuration de débogage. Je souhaite que tous les projets utilisent la configuration Dev pour la configuration de la solution Dev. Au lieu d'utiliser Configuration Manager et de mettre à jour la configuration de chaque projet pour toutes les options de plate-forme possibles (x64, Any CPU, plates-formes mixtes), je veux pouvoir automatiser cela. Il est très fastidieux d'utiliser Configuration Manager pour mettre à jour cette configuration pour toutes les configurations de solution pour tous les projets.

Parce que j'ai plus de 5 configuration de la solution et il y a plus de 20 projets dans la solution.

Modifier le fichier de solution dans un bloc-notes ++ aiderait je devine. Je dois encore essayer cela. Mais est-ce le seul moyen?

Mise à jour:

J'ai rédigé un script simple PS pour y parvenir en utilisant Powershell pour mettre à jour le fichier SLN, pour une configuration sln. Mais à la recherche d'autres moyens aussi.

$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" 

Il y a assez de place pour polir ce script. Va vérifier ça.

+1

alternative est d'éditer les fichiers via Microsoft.Build.BuildEngine, voir par exemple http://stackoverflow.com/questions/7887538/modify-programatically-csproj-files#8492560 – stijn

+0

@stijn - La réponse discutée au fil que vous avez donné est maintenant obsolète. J'ai trouvé un autre fil [http://stackoverflow.com/questions/707107/parsing-visual-studio-solution-files] où il y a une réponse pour la nouvelle façon d'utiliser Microsoft.Build.Construction.SolutionFile.Parse () méthode avec VS 2015. Le chemin MSBuild est C: \ Program Files (x86) \ Assemblées de référence \ Microsoft \ MSBuild \ v14.0 \ Microsoft.Build.dll –

+0

Je ne suis pas sûr que ce soit vraiment obsolète? Notez que c'est pour modifier les * projets *, la question à laquelle vous faites référence concerne les * solutions *. Bien que pour votre cas, vous avez probablement besoin des deux. – stijn

Répondre

0

Oui, vous pouvez récupérer tous les projets AbsolutePath en utilisant la méthode SolutionFile.Parse, vous pouvez utiliser la classe Microsoft.Build.Evaluation.Project pour définir la propriété associée. Comme ceci:

S'il vous plaît ajouter une référence nommée extensions 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

Cool. Je vais essayer rapidement ceci et mettre à jour! –

+0

@ Baskar, qu'en est-il de ce problème? Pourriez-vous obtenir des informations utiles de la réponse de Cole? Si c'est utile pour vous, souvenez-vous de le marquer comme la réponse :) Passez une bonne journée! –

+0

@ JackZhai-MSFT - Je veux être en mesure de mettre à jour le fichier SLN sans charger le projet correspondant. Est-ce possible? Fondamentalement, je suis à la recherche de l'API pour Configuration Manager. Dans Visual Studio, nous pouvons ouvrir le gestionnaire de configuration et mettre à jour la configuration des projets pour une configuration sln. Cette option est fastidieuse, si j'ai 15 projets et plus de 5 ou 6 sln conifgurations (comme Dev, Test, Prod, UAT, etc.). Vous cherchez un moyen de mettre à jour le fichier sln directement en utilisant une API pour Configuration Manager. En utilisant regex je pourrais mettre à jour sln directement. Mais je compte plutôt sur l'API. –