我想要创建一个Visual Studio的自定义项目系统。但是线上的一些材料让我有点困惑。它们都提到了VSPackages,据我所知,这些与VSIX非常不同。我的现有扩展功能是通过VSIX提供的。是否不可能通过VSIX提供新的项目类型?
我也看了他们的示例代码,那是一些令人作呕的COM东西。难道没有像为扩展具有语法突出显示等编辑器一样的闪亮MEF项目吗?
我想要创建一个Visual Studio的自定义项目系统。但是线上的一些材料让我有点困惑。它们都提到了VSPackages,据我所知,这些与VSIX非常不同。我的现有扩展功能是通过VSIX提供的。是否不可能通过VSIX提供新的项目类型?
我也看了他们的示例代码,那是一些令人作呕的COM东西。难道没有像为扩展具有语法突出显示等编辑器一样的闪亮MEF项目吗?
目前没有MEF支持/API来实现对一个新项目系统的支持。实现支持有两种方式:
我假设你选择第二个选项。
MPF库曾经是Visual Studio SDK的一部分,但最终移动到了CodePlex,在Visual Studio 2010发布时左右。而本文将着重介绍我在GitHub上修改并发布的这个库的版本。 此版本的库比以往其他版本有许多优点,其中一些在README中有所记录。
Managed Package Framework for Visual Studio 2010
要实现对您的语言的支持,您需要执行以下操作:
为您的语言实现命令行MSBuild支持。
*.targets
, 用于构建您的语言的项目。创建一个VSPackage,以在IDE中实现对您的MSBuild项目的支持。这将允许Visual Studio打开/保存/关闭扩展名为您选择的项目文件。
创建一个或多个“项目模板”,以允许用户在IDE中创建新的您的语言的项目。
创建一个或多个“项目项模板”,以允许用户轻松添加文件到项目中。
这个答案只是浅尝辄止,但你提出了一个非常广泛的问题,不幸的是我现在没有时间详细介绍所有方面。
编辑: 关于部署 - 您可以并且应该将您的VSPackage包含在VSIX中。但是,由于您的扩展程序需要安装MSBuild扩展程序到用户项目具有标准访问权限的位置(C:\Program Files\MSBuild
或C:\Program Files(x86)\MSBuild
),因此您需要将整个内容包装在安装程序中以提供自定义安装。我建议使用WiX进行此操作;虽然它不是微不足道的,但是它是免费的,工作非常可靠,并且一旦您掌握了它,使用起来并不太具有挑战性。
很不幸,Visual Studio API非常丑陋。如果您要深度集成Visual Studio的内部机制,则必须使用“丑陋的COM”,直接使用或通过托管包装器(Interop Assemblies)。为了避免混淆,我尝试解释Visual Studio可扩展性的概念,并发布有用的文档链接。希望这能帮到您。
您可以使用宏、插件、VSPackages和Managed Extensibility Framework(MEF)扩展Visual Studio。从Visual Studio 2012开始,Visual Studio扩展 不再支持宏! 然而,使用VSPackages提供更多机会。有关更多详细信息,请参见:
从Visual Studio 2010开始,您可以使用MEF仅自定义Visual Studio编辑器。但是,您可以将MEF扩展与VSPackage组合使用。如何操作,请参阅以下链接。
我认为使用MEF只有微小的优势。
要为Visual Studio创建自定义项目类型,您应该使用Visual Studio模板。这是一种与VSPackage和其他扩展方法分离的技术。它允许Visual Studio支持新类型的项目并添加新的项目向导。
为了分发软件包,您可以使用VSIX或MSI文件。任何一个都可以包含VSPackage、Visual Studio模板、依赖库、图标、配置文件等。VSIX和MSI安装程序支持visualstudiogallery门户网站。但是,Visual Studio只能自动更新来自visualstudiogallery的VSIX文件。 默认情况下,VSIX(作为部署包)和VSPackage(作为插件的起点)位于同一项目中,但您可以将其分成不同的项目或使用msi代替vsix。
.csproj
和相关文件(或Visual Studio附带的其他语言项目),或者2)添加对基于名为*.myproj
的文件的全新项目系统的支持(例如)? - Sam Harwell