0

我正在尝试以编程方式将测试项目添加到解决方案中。但是,当执行下面的代码时,我在“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));



        }
4

1 回答 1

3

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

于 2009-04-20T22:08:17.030 回答