繁体   English   中英

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

[英]Creating Visual Studio project system with MEF and VSIX

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

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

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

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

我假设你选择#2。

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

Visual Studio 2010的托管包框架

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

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

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

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

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

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

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

不幸的是,Visual Studio API真的很难看。 如果要与Visual Studio的内部机制进行深度集成,则必须使用“ hideous COM ”。 直接或通过托管包装器(Interop Assemblies)。 为了避免混淆,我尝试解释Visual Studio Extensibility的概念并发布有用的文档链接。 希望它会对你有所帮助。

您可以使用宏,加载项,VSPackage和托管扩展性框架(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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM