2009-04-20 8 views
0

Je tente d'ajouter par programme un projet de test à une solution. Cependant, lorsque le code ci-dessous s'exécute, je reçois une exception File IO sur la ligne "vhaSolution.GetProjectTemplate (" TestProject.zip "," Csharp ")". L'erreur indique que "la langue spécifiée n'est prise en charge par aucun des paquets installés". Est-ce que quelqu'un a une idée de ce qui pourrait causer cela?Extensibilité Visual Studio, création par programme d'un projet

public enum TestProjectType 
    { 
     Unit, 
     Acceptance, 
     Integration 
    } 

public static void CreateTestProject(string fullyQualifiedSolutionFileName,string projectName,TestProjectType testProjectType) 
     { 
      #region Argument Validation 
      if (String.IsNullOrEmpty(fullyQualifiedSolutionFileName) || String.IsNullOrEmpty(fullyQualifiedSolutionFileName.Trim())) 
      { 
       throw new ArgumentNullException("fullyQualifiedSolutionFileName", "The solution file location is required."); 
      } 

      if (String.IsNullOrEmpty(projectName) || String.IsNullOrEmpty(projectName.Trim())) 
      { 
       throw new ArgumentNullException("projectName", "The project name is required."); 
      } 

      if (!File.Exists(fullyQualifiedSolutionFileName)) 
      { 
       throw new ArgumentException(String.Format("The file {0} specified does not exist.", fullyQualifiedSolutionFileName)); 
      } 

      if (testProjectType == null) testProjectType = TestProjectType.Unit; 
      #endregion 

      System.Type vsType = System.Type.GetTypeFromProgID("VisualStudio.DTE.8.0"); 
      Object vs = System.Activator.CreateInstance(vsType, true); 
      EnvDTE80.DTE2 dte8Obj = (EnvDTE80.DTE2)vs; 

      Solution2 vhaSolution = (Solution2)dte8Obj.Solution; 
      vhaSolution.Open(fullyQualifiedSolutionFileName); 

      //TODO: Externalize company name 
      string cmpnyName = "Vha"; 
      string testProjectName = String.Format("{0}.{1}.{2}{3}",cmpnyName,projectName,testProjectType.ToString(),"Test"); 
      string testTemplateLocation = vhaSolution.GetProjectTemplate("TestProject.zip", "CSharp"); 
      FileInfo rootSolutionFolder = new FileInfo(fullyQualifiedSolutionFileName); 

      //TODO: Externalize test directory name 
      string testDirName = String.Format("{0}\\{1}\\{2}\\{3}",rootSolutionFolder.DirectoryName,"test",testProjectType.ToString(),testProjectName); 

      if (!Directory.Exists(testDirName)) 
      { 
       //may throw an exception if the dir can't be created... 
       Directory.CreateDirectory(testDirName); 
      } 


      Project vhaTestProj = vhaSolution.AddFromTemplate(testTemplateLocation,testDirName,testProjectName + ".proj",false); 
      vhaTestProj.Save(String.Format("{0}\\{1}.proj",testDirName , testProjectName)); 



     } 

Répondre

3

Je l'ai compris. J'ai besoin d'utiliser le prog ID VisualStudio.DTE.9.0 afin qu'il pointe vers l'emplacement de registre correct pour VS 2008.

Questions connexes