2014-04-02 38 views
2

我使用C#中的Visual Studio 2012VS向导模板 - 更改项目的解决方案和目录

我跟着MSDN步骤写一个Visual Studio向导模板: 我创建了一个VS模板,然后我创建了一个类与它实现了IWizard接口一个类库项目,我配置了.vstemplate文件等..

现在,我的目标是在RunStarted功能代码,执行以下操作来写:

在项目创建,它复制另一个现有的解决方案目录位置添加到新项目选定位置,然后,不是在新解决方案中创建新项目,而是将新项目添加到复制的解决方案中,在特定的“应用程序”文件夹中,并且不会创建新解决方案。

RunStarted方法中我写了一个简单的CopyDirectory代码,它将想要的解复制到我从ReplacementsDictionary参数中提取的$SolutionDirectory$中。但是现在,我不能成功继续并更改新的项目配置,尽管它将作为复制解决方案的项目生成。

你对这个问题有什么想法吗? 谢谢!

回答

2

你有2种选择:

  1. 如果你有解决方案的DTE \ Solution2对象,你可以使用AddFromFile()方法或者通过AddFromTemplate()方法从模板中直接添加该项目。

    当前DTE目的可通过GetService()方法获得:

    //获取当前正在运行的Visual Studio IDE的实例

    DTE DTE =(DTE)GetService的(typeof运算(DTE));

  2. 如果你不能得到的溶液,作为DTE对象,可以通过使用XML编辑编辑.sln file(看看现有的.sln文件的项目是如何加的)。

+0

嗨,我陷入了一个问题:我在VS 2012上使用了你的解决方案,一切运行良好,但现在我必须在VS 2010上也能正常工作。我在MSDN中读到Project Template不可用在C++ 2010中,我只能使用.vsz模板,它们的行为完全不同:它使用JavaScript代码。在2012年,我有一个.vstemplate模板和一个实现了IWizard的classLibrary.dll。你知道我能做些什么才能在2010年有最接近的解决方案吗? – user1835297

+0

为什么你不使用'.vsz模板'为2010和2012模板?它可以防止双重代码。 2010年的.vsz模板与2012年之间唯一的变化是VS2012中的'Wizard = VsWizard.VsWizardEngine.11.0' 行,VS2010中的Wizard = VsWizard.VsWizardEngine.10.0'。 – user3114639

+0

因为我想在C#中使用DTE编写模板后面的代码,并且.vsz模板背后的代码位于Java Script中。 – user1835297

相关问题