15

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

我还查看了他们的示例代码,这是一些可怕的COM 内容。有没有新的闪亮的 MEF 东西,比如用语法突出显示和东西来扩展编辑器?

4

2 回答 2

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;它不是微不足道的,但它是免费的,工作异常可靠,并且一旦你掌握了它就不会太难使用。

于 2013-07-06T19:36:13.243 回答
3

不幸的是,Visual Studio API 真的很丑。如果要与 Visual Studio 的内部机制进行深度集成,则必须使用“<em>hideous COM”。直接或通过托管包装器(互操作程序集)。为避免混淆,我尝试解释 Visual Studio 可扩展性的概念并发布有用的文档链接。希望它会帮助你。

可以使用宏、加载项、VSPackage 和托管扩展性框架 (MEF) 扩展来扩展 Visual Studio。从 Visual Studio 2012 开始,Visual Studio Extensions不再支持宏!但是,使用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。

于 2013-07-04T19:42:48.570 回答