我想将现有项目添加到由模板生成的新解决方案中。我可以通过 vstemplate 文件实现这一点,还是必须使用 IWizard。如果我必须使用 IWizard,我该如何正确使用它。目前我尝试了以下方法:
- 添加一些解决方案文件夹和一个项目的多项目模板
- 具有自定义向导数据的向导。$wizarddata$ 包含一些指向已经存在于硬盘上的项目的相对路径。在向导中,我选择了这些项目的基本路径。我现在如何将此项目添加到我的解决方案中?
主要问题似乎是解决方案对象不包含任何内容:
var type = Type.GetTypeFromProgID("VisualStudio.DTE.10.0");
var dte2 = (EnvDTE80.DTE2)Activator.CreateInstance(type);
var solution = (EnvDTE100.Solution4)dte2.Solution;
var projects = dte2.ActiveSolutionProjects;
projects 不包含任何项目。这同样适用于 dte2.Solution.Projects。此代码在 IWizard 实现的 RunFinished 函数中调用。或者:
var type = Type.GetTypeFromProgID("VisualStudio.DTE.10.0");
var dte2 = (EnvDTE80.DTE2)Activator.CreateInstance(type);
dte2.ExecuteCommand("File.AddExistingProject", "X:\\Path\\To\\Project\\ProjectName.csproj");
将引发 COM 异常。如果我从 Visual Studio 中的宏执行 ExecuteCommand,它将正常工作。我究竟做错了什么?