L'analyse de solutions de Visual Studio fichiers
Comment puis-je analyser solution Visual Studio (SLN) de fichiers .NET?
Je voudrais écrire une application qui fusionne plusieurs solutions en une seule, tout en économisant de la relative ordre de construction.
Vous devez vous connecter pour publier un commentaire.
L' .NET 4.0 version de Microsoft.De montage contient un SolutionParser classe dans le Microsoft.Construire.La Construction de l'espace de noms que l'analyse de solutions de Visual Studio fichiers.
Malheureusement cette classe est interne, mais j'ai regroupé certaines de ces fonctionnalités dans une classe qui utilise la réflexion pour obtenir des propriétés communes qui peuvent vous être utiles.
Noter que vous devez changer votre cible cadre ".NET Framework 4" (pas le profil du client) pour être en mesure d'ajouter de Microsoft.Construire référence à votre projet.
Microsoft.Build.Evaluation
je pense que c'était la bonne, ou vouliez-vous dire quelque chose d'autre?SolutionFile
introduit dans Microsoft.Build.dll installé avec Visual Studio 2015 (voir msdn.microsoft.com/en-us/library/...)s_SolutionParser_configurations
? Ne peux pas le trouver dansObject cfgArray = s_SolutionParser_configurations.GetValue(solutionParser, null);
Avec Visual Studio 2015, il est désormais accessible au public
SolutionFile
classe qui peut être utilisée pour analyser les fichiers de solution:Cette classe est trouvé dans la Microsoft.Build.dll 14.0.0.0 de l'assemblée. Dans mon cas, il était situé à:
Grâce à Phil pour signaler!
Add-Type -Path "C:\Program Files (x86)\Reference Assemblies\Microsoft\MSBuild\v14.0\Microsoft.Build.dll"
$slnFile = [Microsoft.Build.Construction.SolutionFile]::Parse($slnPath);
$slnFile.ProjectsInOrder
Je ne sais pas si quelqu'un est toujours à la recherche de solutions à ce problème, mais j'ai couru à travers un projet qui semble faire exactement ce qui est nécessaire.
https://slntools.codeplex.com/
L'une des fonctions de cet outil est de fusionner plusieurs solutions ensemble.
JetBrains (les créateurs de Resharper) ont public sln l'analyse des capacités de leurs assemblées (sans réflexion). Il est probablement plus robuste que l'open source solutions suggérées ici (sans parler de la ReGex hacks). Tout ce que vous devez faire est de:
JetBrains.Platform.ProjectModel
JetBrains.Platform.Util
JetBrains.Platform.Interop.WinApi
La bibliothèque n'est pas documentée, mais Réflecteur (ou en effet, dotPeek) est votre ami. Par exemple:
Je ne peux pas vraiment vous offrir une bibliothèque et a mon avis il n'y en a pas un qui existe là-bas. Mais j'ai passé beaucoup de temps à déconner avec .la sln fichiers en lot modification des scénarios et j'ai trouvé Powershell pour être un outil très utile pour cette tâche. L' .La SLN format est assez simple et peut-être presque entièrement analysé avec un peu rapide et sale expressions. Par Exemple
Inclus les fichiers de Projet.
Il n'est pas toujours joli, mais il est un moyen efficace de faire du traitement par lot.
nous avons résolu un problème similaire de la fusion de la solutions automatiquement par l'écriture d'un Visual Studio plugin qui a créé une nouvelle solution ensuite recherché *.la sln fichier et importés dans le nouveau à l'aide de:
Notre problème est légèrement différente que nous avons envie de VS faire le tri de l'ordre de génération pour nous, afin que nous puis converti en n'importe quelle dll références à des références de projet, si possible.
Ensuite, nous avons automatisé le dans un processus de construction par l'exécution VS via automation COM.
Cette solution a été un peu Heath Robinson, mais elle a l'avantage que VS était en train de faire le montage de sorte que notre code n'était pas la personne à charge sur le format de la sln fichier. Qui a été utile lorsque nous avons déménagé de VS 2005 à 2008, puis de nouveau à 2010.
Tout est parfait, mais je voulais également à obtenir de la sln capacité de production - dans le code de l'instantané ci-dessus, vous êtes seulement à l'analyse .la sln fichiers - j'ai voulu faire une chose semblable, sauf à être en mesure de re-générer de la sln avec de légères modifications .la sln fichier. De tels cas pourrait être, par exemple, le portage d'un même projet pour différents .NET plate-forme. Pour l'instant c'est uniquement de la sln ré-génération, mais plus tard, je vais l'étendre aux projets.
Je suppose que je voulais aussi faire la démonstration de la puissance des expressions régulières et des interfaces natives.
(Plus petite quantité de code avec plus de fonctionnalités)
Mise à jour 4.1.2017
J'ai créé séparer le dépôt svn pour l'analyse .la sln solution:
https://sourceforge.net/p/syncproj/code/HEAD/tree/
Ci-dessous est mon propre exemple de code snippet (prédécesseur). Vous êtes libre de les utiliser.
Il est possible qu'à l'avenir, svn solution basée sur le code d'analyse sera mise à jour avec des capacités de génération de bien.Mise à jour 4.2.2017
Code Source dans le SVN est en charge .la sln génération.
Je l'ai expliqué, a déterminé que le MSBuild classes peuvent être utilisées pour manipuler les structures sous-jacentes. Je vais avoir plus de code sur mon site web plus tard.
relativepath
devient l'URL que le site doit s'exécuter dans IISExpress etc sous.Réponse par @jean-leidegren est grande. Pour le pré-VS2015, c'est d'une grande utilité. Mais il y avait une petite erreur, comme le code pour récupérer les configurations manquait. Si envie d'ajouter, dans le cas où quelqu'un est en difficulté pour utiliser ce code.
L'amélioration est très simple:
Que l'aide supplémentaire, fournissant un code simple pour parcourir les propriétés d'un
System.Type
comme suggéré par @oasten.Merci @Jean Leidegren il offre un moyen efficace.
J'écris un hlper classe pour je ne peux pas utiliser son code que je ne trouve pas le
s_SolutionParser_configurations
et les projets sans FullName.Le code est dans github qui peut les projets avec le Nom complet.
Et le code de cant get SolutionConfiguration.
Mais quand vous dev un vsx la vs dirai peux pas trouver
Microsoft.Build.dll
,de sorte que vous pouvez essayer d'utiliser dte pour obtenir tous les projets.Le code qui utilisent dte pour obtenir tous les projets est en github
Voir : http://www.wwwlicious.com/2011/03/29/envdte-getting-all-projects-html/
Pour ce que sa vaut le coup, j'ai créé un petit projet pour lire la sln et proj fichiers disponibles sur nuget:
https://www.nuget.org/packages/ByteDev.DotNet/