2010-04-29 9 views
4

Je souhaite écrire un assistant dans .net qui génère par programme Visual Studio Solution avec certains projets. Je vais avoir un fichier XML avec les détails des fichiers doivent être inclus dans le projet avec leurs chemins respectifs pour les récupérer et une liste de noms de projets. Est-il possible que je puisse y parvenirGénérer par programme une solution Visual Studio

+0

En tant que complément/Makro pour Visual Studio ou autonome? – Bobby

+0

Je veux en faire une application autonome. –

Répondre

2

Bien le Visual Studio SDK serait votre chemin à parcourir. Il existe des méthodes où vous pouvez créer des fichiers et je pense aussi des projets basés sur des modèles de projet. Ainsi, vous pouvez par exemple créer un nouveau projet "asp.net mvc" ou une bibliothèque de classes. Vous pourriez même créer votre propre modèle.

Je suis assez sûr que vous pouvez le faire uniquement à l'intérieur de VS.

Sinon, il n'y a rien de mal à générer le projet et les fichiers sln génèrent les fichiers xml, c'est l'une des bonnes choses qu'ils soient au format XML. Vous avez juste besoin de générer des Project Guids, mais je pense que ce serait assez simple et totalement "légal".

bonne progression!

3

Consultez le Text Template Transformation Toolkit (T4). C'est plutôt gentil et alimente une partie de la génération de fichiers dans ASP.NET MVC. Scott Hanselman a un très bon introductory article sur le sujet.

+0

Après de longues heures google j'ai trouvé ce lien http://goo.gl/ZQhV Je pense que cela va m'aider dans la mise en place de la génération automatique de solution Visual Studio. –

+1

Une option de plus que j'ai trouvé dans Codeplex http://goo.gl/40Lf –

+0

Votre premier lien est à la documentation MSDN pour les extensions et les compléments Visual Studio, donc ne vous aidera pas à construire une solution autonome (comme vous l'avez dit Champs obligatoires). Vous aurez peut-être plus de chance avec le projet Tree Surgeon, même s'il semble que vous ayez défini des règles pour savoir où placer les choses et ne pas répondre à vos besoins. – alastairs

1

Vous pouvez le faire avec un court code ou un script. Visual Studio va remplir la plupart des GUID pour vous ...

J'ai frappé quelque chose comme ça en tant que projet unique pour assembler des projets. Ce n'est pas parfait à 100%, vous pourriez vous retrouver avec des doublons de la façon dont le code gère les noms de projets. J'espère que cela vous montrera le chemin. Ce que nous faisons ici est de configurer le préambule du fichier Solution, puis d'insérer chaque solution (vous avez besoin du type de projet guid, vu ici FAE, mais pas du GUID du projet, que VS insérera lors de l'enregistrement de la solution fichier). Il y a un peu plus de standard, ensuite nous insérons la configuration de construction pour chaque projet. J'avais environ 12 configurations pour chaque projet (différents réglages de Release et de Debug) mais je l'ai condensé ici à deux.

static void Main(string[] args) 
    { 
     if(args.Count() != 2) 
     { 
      Usage(); 
      return; 
     } 

     var rootDir = args[0]; 
     var output = args[1]; 

     var files = Directory.EnumerateFiles(rootDir, 
              "*.*proj", 
              SearchOption.AllDirectories); 

     var configs = new StringBuilder(); 

     var configDefs = new string[]{ 
     ".Debug|Any CPU.ActiveCfg = Debug|Any CPU", 
     ".Release|Any CPU.ActiveCfg = Release|Any CPU", 
     "Other_configurations_see_solution_for_how" 
     }; 

     using(var sw = new StreamWriter(output)) 
     { 
      sw.WriteLine(Resources.Head); 
      foreach(var file in files) 
      { 
       var relpath = file.Substring(rootDir.Length + 1); 
       var split= relpath.Split('\\'); 
       var name = split[0]; 
       var path = relpath; 
       sw.WriteLine("Project(\"{{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}}\") = \"{0}\", \"{1}\", \"{0}\"", name, path); 
       sw.WriteLine("EndProject"); 

       foreach(var configDef in configDefs) 
       { 
        configs.AppendLine(string.Format("{0}{1}", file, configDef)); 
       } 
      } 

      sw.WriteLine(@"Global 
GlobalSection(SolutionConfigurationPlatforms) = preSolution 
    Debug|Any CPU = Debug|Any CPU  
    Release|Any CPU = Release|Any CPU 
    ...Other_configurations_see_solution_for_how... 
EndGlobalSection 
    GlobalSection(ProjectConfigurationPlatforms) = postSolution"); 

      sw.WriteLine(configs.ToString()); 
      sw.WriteLine(Resources.Tail); 
     } 
    } 

Head ressemble un peu:

Microsoft Visual Studio Solution File, Format Version 11.00 
# Visual Studio 2010 

Mais je pense qu'il ya des caractères de contrôle dans la première ligne - méfiez-vous!

queue ressemble

GlobalSection(SolutionProperties) = preSolution 
    HideSolutionNode = FALSE 
    EndGlobalSection 
EndGlobal 
+0

S'il vous plaît noter; le GUID que j'ai mis ici pour le type de projet est un projet C#. Ce code vous donnera donc une solution complète de projets C# quel que soit leur type. Ajuster peut-être nécessaire et YMMV :) – CJBrew

0

Nous avons construit un outil appelé Tree Surgeon qui fait exactement cela. Les choses sont en cours de révision et de discussion pour les réévaluer (ou les abandonner) car les temps ont changé depuis sa création, mais il fait ce que vous demandez ici (et est open source).

Questions connexes