6
votes

Utilisation de C #, comment créer une nouvelle solution Visual Studio 2012 Programmatiquement?

j'ai suivi ce débordement de pile sur la façon de créer un Projet pour VS2010, en espérant que cela me dirigerait dans la bonne direction, mais cela ne couvre pas la création d'un projet ou de solution VS2012.

J'ai également exploré en utilisant slnTools , mais je ne vois pas comment créer une nouvelle solution à partir de zéro.

finalement, je voudrais créer 3- 4 VS2012 Projets Programmatiquement et ensuite les ajouter à une solution qui est également créée par programme.


J'ai tenté une solution basée sur Ce débordement de pile , mais je reçois une erreur étrange. Voici le code: xxx

et voici l'erreur suivante:

 Entrez la description de l'image ici


6 commentaires

Par curiosité, pourquoi? Cela semble être quelque chose que vous le feriez rarement, pourquoi créer un programme pour cela?


J'ai un peu un ensemble spécifique d'exigences qui seront répétées souvent, mais pour simplifier l'utilisation d'un exemple abstrait, disons que j'ai 20 développeurs différents qui travaillent pour moi - je voudrais qu'ils remplissent une simple victoire avec un projet de base info et ensuite avoir la solution générée automatiquement (systématiquement) avec les couches correctes, les classes utilitaires, les emplacements, les paramètres de publication, etc. Il devient plus compliqué que cela, laissez-moi donc savoir hors ligne si vous voulez plus de détails.


Dupliqué possible de Stackoverflow.com/Questtions/12119667 / ...


@ Xenolightning - Merci, je l'ai examiné en fait une plus tôt, mais cela ne fournit pas un exemple complet pour la création et la sauvegarde de la solution.


@Matthewpatrickcashatt Ahh désolé vous après avoir créé une solution. Les deux ne couvrent pas ça. Ce peut vous aider. Solution4.Saveas ressemble au candidat à la création du fichier de solutions.


@MatthewPatrickCashatt le type COM créé est dte2 pas dte , voir ma réponse ci-dessous pour le code qui a fonctionné pour moi. Acclamations.


4 Réponses :


10
votes

Cela fonctionne pour moi (vs2012 Ultimate): xxx

[modifier:] Regardant sous HKCR, il semble qu'il y ait un visualstudio.dte (sans le .11.0) qui pointera la dernière version de vs. Donc, sur ma machine avec VS2012 et VS2013, il utilisera ce dernier.


0 commentaires

2
votes

Testé et fonctionnant à l'aide de .NET4 Winforms, et une référence à ENVDTE100.DLL (qui devrait également ajouter des références à ENVDTE90.DLL, ENVDTE80.DLL, ENVDTE80.DLL et ENVDTE.DLL)

Type type = Type.GetTypeFromProgID("VisualStudio.DTE.11.0");
Object obj = System.Activator.CreateInstance(type, true);
EnvDTE80.DTE2 dte = (EnvDTE80.DTE2)obj;
EnvDTE100.Solution4 _solution = (EnvDTE100.Solution4)dte.Solution;
_solution.Create(@"C:\Test\", "Test");
_solution.SaveAs(@"C:\Test\Test.sln");


1 commentaires

Ajoutez la référence à EnvMTE via Nuget. Ensuite, vous n'avez aucun problème avec des dépendances.



1
votes

Les deux solutions ci-dessous par Jimmy et Xenolighting Work, mais j'ai toujours eu le problème de l'erreur susmentionnée. Donc, au cas où quelqu'un d'autre rencontre cette erreur, voir ce lien:

http://msdn.microsoft.com/en-us/library/ms228772 (v = vs.80) .aspx p>

Pour résumer le lien ci-dessus (ou Au cas où il est jamais brisé), voici ce que vous faites. Ajoutez cette classe à votre solution: p> xxx pré>

enveloppe maintenant le code de génération de code (des réponses ci-dessous) avec ces instructions: p>

MessageFilter.Register();
//INSERT YOUR CODE HERE
MessageFilter.Revoke();


0 commentaires

1
votes

Je n'ai pas de studio Visual Studio 2012 Ide tellement Essayer avec Visual Studio 2013 Strong>

Utilisation C #, je crée une nouvelle solution Visual Studio 2013 Programmatiquement P>

Étape 1: Tout d'abord, créez une application de formulaire de fenêtre et après cela pour créer un bouton avec nom Créer dans le formulaire par défaut1. P>

Step2: Ensuite, écrivez le code suivant dans le bouton Créer un déclic. P>

private void btn_Create_Click(object sender, EventArgs e)
      {
          try
          {
              //// Get an instance of the currently running Visual Studio IDE.
              System.Type type = System.Type.GetTypeFromProgID("VisualStudio.DTE.12.0");
              Object obj = System.Activator.CreateInstance(type, true);
              EnvDTE.DTE dte = (EnvDTE.DTE)obj;
              dte.MainWindow.Visible = true; // optional if you want to See VS doing its thing

              // create a new solution
              dte.Solution.Create(@"C:\NewSolution\", "NewSolution");
              var solution = dte.Solution;

              // create a C# WinForms app
              solution.AddFromTemplate(@"C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\ProjectTemplatesCache\CSharp\Windows\1033\WindowsApplication\csWindowsApplication.vstemplate",
                  @"C:\NewSolution\WinFormsApp", "WinFormsApp");

              // create a C# class library
              solution.AddFromTemplate(@"C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\ProjectTemplatesCache\CSharp\Windows\1033\ClassLibrary\csClassLibrary.vstemplate",
                  @"C:\NewSolution\ClassLibrary", "ClassLibrary");

              // save and quit
              dte.ExecuteCommand("File.SaveAll");
              dte.Quit();
          }
          catch (Exception ex)
          {
              throw;
          }
      }  


0 commentaires