C# Visual Studio可扩展性,以编程方式创建项目
我试图以编程方式将测试项目添加到解决方案中。但是,当下面的代码执行时,我在“vhaSolution.GetProjectTemplate(“TestProject.zip”、“Csharp”)”行收到一个文件IO异常。该错误表示“任何安装的软件包都不支持指定的语言”。有人知道这是什么原因吗C# Visual Studio可扩展性,以编程方式创建项目,c#,visual-studio,extensibility,C#,Visual Studio,Extensibility,我试图以编程方式将测试项目添加到解决方案中。但是,当下面的代码执行时,我在“vhaSolution.GetProjectTemplate(“TestProject.zip”、“Csharp”)”行收到一个文件IO异常。该错误表示“任何安装的软件包都不支持指定的语言”。有人知道这是什么原因吗 public enum TestProjectType { Unit, Acceptance, Integration } publi
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));
}
我想出来了。我需要使用prog ID VisualStudio.DTE.9.0,以便它能够指向VS2008的正确注册表位置。我找到了它。我需要使用prog ID VisualStudio.DTE.9.0,以便它能够指向VS2008的正确注册表位置