我们有一堆模板,其中一些只有在向c# Web Application项目添加新项时才可见(使用"Web"模板组ID进行过滤)。然而,我们的许多其他模板没有意义添加到web项目中(它们的目的是添加到标准c#类库项目中)。当我在c# Web Application项目中添加新项时,我想防止这些模板被显示。
我不确定这是否可行。我知道逆函数是可能的;创建只显示在web项目下的项模板,但我希望我们的一些模板只显示在无特色的c#项目上(而不是 WebApp, WPF, Workflow等)。
我在HKCUSoftwareMicrosoftVisualStudio10.0Exp_ConfigProjects{FAE04EC0-301F-11d3-BF4B-00C04F79EFBC}(无味的c#项目类型注册)下的注册表中查看了一下,我可以看到它没有根据模板组ID指定任何过滤(所以这似乎没有帮助)。有风格的项目子类型,如工作流,似乎过滤了他们允许你添加的项目(使用,例如,使用模板组ID为"WorkflowItemTemplateGroupID"),但似乎没有风格的项目不过滤他们的项目,因此任何有VisibleByDefault设置为"false"的项目将永远是不可见的(因为他们不能指定模板组ID)。
有办法做我想做的事吗?
我想出了如何使用SVsRegisterNewDialogFilters服务(这是拼图中缺失的一块)来做到这一点。
它使您能够提供ivsfilteraddprojtemdlg实现的实现,无论何时调用add-project-item对话框(无论谁调用它),都将调用该实现。Web/Silverlight项目的GUID与c#项目的GUID不同(所以我可以简单地过滤掉各种模板目录)。