Visual Studio可扩展性,以编程方式创建项目

时间:2009-04-20 21:50:44

标签: c# visual-studio extensibility

我正在尝试以编程方式将测试项目添加到解决方案中。但是,当下面的代码执行时,我在“vhaSolution.GetProjectTemplate(”TestProject.zip“,”Csharp“)”行上收到文件IO异常。该错误表示“任何已安装的软件包不支持指定的语言”。有谁知道造成这种情况的原因是什么?

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



        }

1 个答案:

答案 0 :(得分:3)

我明白了。我需要使用prog ID VisualStudio.DTE.9.0,以便它指向VS 2008的正确注册表位置。