ENVDTE-将新项目添加到现有解决方案中,并将其定位在特定文件夹中
本文关键字:定位 文件夹 添加 ENVDTE- 解决方案 新项目 | 更新日期: 2023-09-27 17:57:50
我在Visual Studio 2012上使用c#编写了一个Visual Studio向导模板。
我遵循MSDN的步骤:我创建了一个VS模板,然后我创建了带有实现IWizard接口的类的类库项目,我配置了.vstemplate文件等
在我的类库项目中,我从计算机的某个目录中复制一个现有的解决方案,将新生成的项目添加到该解决方案中,并运行它
我这样做就像:
public void RunStarted(object automationObject, Dictionary<string, string> replacementsDictionary, WizardRunKind runKind, object[] customParams)
{
solutionDir = replacementsDictionary["$solutiondirectory$"];
destProjectDir = replacementsDictionary["$destinationdirectory$"];
projName = replacementsDictionary["$specifiedsolutionname$"];
EmulationDir = @"MY_PATH'TestSln";
DirectoryCopy(EmulationDir, solutionDir);
dte = (DTE2)automationObject;
}
public void RunFinished()
{
Solution2 solution;
Project p;
solution = (Solution2)dte.Solution;
solution.Open(solutionDir + "''TestSln.sln");
p = solution.AddFromFile(destProjectDir + "''" + projName + ".vcxproj");
}
但我必须将新项目添加到解决方案的特定子文件夹中:上面的代码直接将新项目增加到解决方案中,我想将其添加到solutionDir''apps中。
你知道这样做的方法吗?谢谢
您可以使用SolutionFolder
接口完成此操作:
Project project = getSolutionSubFolder(solution, "SubFolderName");
if (project != null)
{
SolutionFolder folder = (SolutionFolder)project.Object;
folder.AddFromFile("yourProjectFilePath");
}
getSolutionSubFolder
方法如下所示:
private static Project getSolutionSubFolder(Solution2 solution, string subfolder)
{
return
solution
.Projects
.Cast<Project>()
.FirstOrDefault(
p => string.Equals(p.Name, subfolder, StringComparison.Ordinal));
}