2009-04-20 79 views
0

我正在嘗試以編程方式將測試項目添加到解決方案。但是,當下面的代碼執行時,我會在「vhaSolution.GetProjectTemplate(」TestProject.zip「,」Csharp「)」行上收到File IO異常。該錯誤表明「他指定的語言不受任何已安裝的軟件包支持」。有沒有人有任何想法可能造成這種情況?Visual Studio擴展性,以編程方式創建項目

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)); 



     } 

回答

3

我想通了。我需要使用prog ID VisualStudio.DTE.9.0,以便它指向VS 2008的正確註冊表位置。

相關問題