0

我们有一堆模板,其中一些仅在将新项目添加到 C# Web 应用程序项目时可见(使用“Web”模板组 ID 过滤)。但是,我们的许多其他模板添加到 Web 项目中没有意义(它们旨在添加到标准 C# 类库项目中)。当我向 C# Web 应用程序项目添加新项目时,我想阻止显示这些模板。

我不确定这是否可行。我知道反过来是可能的;创建显示在 Web 项目下的项目模板,但我希望我们的某些模板仅显示在无味的 C# 项目(而不是WebApp、WPF、工作流等)上。

我查看了 HKCU\Software\Microsoft\VisualStudio\10.0Exp_Config\Projects{FAE04EC0-301F-11d3-BF4B-00C04F79EFBC} 下的注册表(原味的 C# 项目类型注册),我可以看到它没有指定任何基于模板组 ID 过滤(所以这似乎没有帮助)。有特色的项目子类型,例如 Workflow 似乎确实过滤了它们允许您添加的项目(例如,使用“WorkflowItemTemplateGroupID”的模板组 ID),但似乎没有特色的项目不会过滤它们的项目,因此也没有过滤任何项目将 VisibleByDefault 设置为“false”的将始终不可见(因为它们无法指定模板组 ID)。

有没有办法做我想做的事?

4

1 回答 1

0

我想出了如何使用SVsRegisterNewDialogFilters 服务(这是拼图中缺失的部分)来做到这一点。

它使您能够提供 IVsFilterAddProjectItemDlg实现的实现,无论何时调用 add-project-item 对话框(无论谁调用它)都会调用该实现。对于 Web/Silverlight 项目,它使用不同的项目类型 GUID 调用,而不是用于未加修饰的 C# 项目(因此我可以简单地过滤掉我们的各种模板目录。

于 2011-09-12T09:51:06.960 回答