使用MEF和VSIX创建Visual Studio项目系统

Pup*_*ppy 15 c# visual-studio-2012

我正在寻找为Visual Studio创建自定义项目系统.但网上的一些资料让我有些困惑.它们都是指VSPackages,据我所知,这些与VSIX完全不同.我现有的扩展功能是通过VSIX提供的.通过VSIX提供新的项目类型是不可能的吗?

我也查看了他们的示例代码,这是一些可怕的 COM内容.有没有新的闪亮的MEF项目,比如扩展编辑器的语法高亮和东西?

Sam*_*ell 11

没有MEF支持/ API来实现对新项目系统的支持.您可以通过两种方式实施支持.

  1. 直接实现Visual Studio API.此选项非常复杂,但不限制您使用特定的构建系统或文件格式.如果你选择这个,你基本上是靠自己.
  2. 使用托管包框架(MPF)库作为起点.只要您限制使用MSBuild作为项目格式和构建系统,此选项就容易多了.

我假设你选择#2.

MPF库曾经是Visual Studio SDK的一部分,但最终在Visual Studio 2010发布时转移到CodePlex.这篇文章将重点放在我在GitHub上修改和发布的这个库的一个版本,而不是使用那个.此版本的库与其他先前版本相比具有许多优势,其中一些版本在自述文件中有记录,当您按照此链接显示时.

Visual Studio 2010的托管包框架

要实现对您的语言的支持,您需要执行以下操作.

  1. 实现命令行MSBuild支持您的语言.

    • 创建项目文件.
    • 创建一个或多个*.targets用您的语言构建项目所需的MSBuild .
    • 这可能涉及创建一个程序集来保存自定义构建任务.
  2. 创建VSPackage以在IDE中实现对MSBuild项目的支持.这将允许Visual Studio使用您选择的扩展名打开/保存/关闭项目文件.

  3. 创建一个或多个"项目模板",以允许用户在IDE中为您的语言创建新项目.

  4. 创建一个或多个"项目项模板",以允许用户轻松地将文件添加到项目中.

这个答案现在只是略微浮出水面,但你提出了一个非常广泛的问题,不幸的是我现在没有时间详细讨论这方面的问题.

编辑:关于部署 - 您可以并且应该将您的VSPackage包含在VSIX中.但是,由于您的扩展需要在用户项目具有(C:\Program Files\MSBuildC:\Program Files (x86)\MSBuild)标准访问权限的位置安装MSBuild扩展,因此您必须将整个内容包装在安装程序中以提供自定义安装.我建议使用WiX; 它不是微不足道的,但它是免费的,工作异常可靠,并且一旦掌握它就不会太难以使用.