2012-02-09 110 views

回答

2

这有点棘手。你不能用简单的项目模板来做到这一点。项目模板只能在单个项目级别上运行。要实现更高级的逻辑,您需要实施WizardExtension并将其注册到模板的.vstemplate文件中。

<WizardExtension> 
    <Assembly>AssemblyInGACWithSomeLogic</Assembly> 
    <FullClassName>MySuperWizardExtension</FullClassName> 
</WizardExtension> 

您可以在MSDN上找到更多关于向导扩展的信息。

-3

我用下面的代码片段在我的项目模板向导(见麦克Chaliy的答案):

 private static SolutionFolder GetSolutionFolder(Solution2 solution) { 
     var project = GetSolutionFolderProject(solution); 
     return (SolutionFolder) project.Object; 
    } 

    private static Project GetSolutionFolderProject(Solution2 solution) { 
     var project = 
      solution.Projects.Cast<Project>().FirstOrDefault(p => p.Name == "Solution Items"); 
     if (project == null) project = solution.AddSolutionFolder("Solution Items"); 
     return project; 
    } 

其中_solution = (Solution2) _dte.Solution;

+0

好吧,你介意发布你的完整的IWizard实现吗?我不明白我应该在哪里调用GetSolutionFolder方法? – Marcus 2012-03-16 14:29:39

+0

public void RunStarted(object application,Dictionary replacementsDictionary,WizardRunKind runKind,object [] customParams){ \t \t \t _dte = application as _DTE; \t \t \t _solution =(Solution2)_dte.Solution; \t \t \t _solutionFolder = GetSolutionFolder(_solution); \t \t} – ulu 2012-03-17 05:30:55

0

可以使用模板向导做。我想你已经知道如何实现它。

所以,RunFinished方法里面,写这几行:

var destFolder = Directory.GetParent(path).Parent; 
    System.IO.Directory.CreateDirectory(destFolder.FullName + "\\.nuget"); 
    ((Solution2) _dte.Solution).AddSolutionFolder(destFolder.FullName + "\\.nuget"); 

对你有参考EnvDTE80.dll溶液2类。 _dte必须从RunStarted方法设置。

private DTE _dte; 
public void RunStarted(object automationObject, Dictionary<string, string> replacementsDictionary, WizardRunKind runKind, object[] customParams) 
{ 
    _dte = (DTE)automationObject; 
} 
相关问题