我正在寻找为 Visual Studio 创建一个自定义项目系统。但是网上的一些资料让我有些困惑。它们都指的是 VSPackage,据我所知,这些与 VSIX 完全不同。我现有的扩展功能是通过 VSIX 提供的。是否无法通过 VSIX 提供新的项目类型?
我还查看了他们的示例代码,这是一些可怕的COM 内容。有没有新的闪亮的 MEF 东西,比如用语法突出显示和东西来扩展编辑器?
我正在寻找为 Visual Studio 创建一个自定义项目系统。但是网上的一些资料让我有些困惑。它们都指的是 VSPackage,据我所知,这些与 VSIX 完全不同。我现有的扩展功能是通过 VSIX 提供的。是否无法通过 VSIX 提供新的项目类型?
我还查看了他们的示例代码,这是一些可怕的COM 内容。有没有新的闪亮的 MEF 东西,比如用语法突出显示和东西来扩展编辑器?
没有用于实现对新项目系统的支持的 MEF 支持/API。您可以通过两种方式实施支持。
我假设您使用选项#2。
MPF 库曾经是 Visual Studio SDK 的一部分,但最终在 Visual Studio 2010 发布时移至 CodePlex。这篇文章将重点介绍我在 GitHub 上修改和发布的这个库的一个版本,而不是使用那个。此版本的库与其他以前的版本相比具有许多优点,其中一些在您点击此链接时显示的自述文件中进行了记录。
要实现对您的语言的支持,您需要执行以下操作。
为您的语言实现命令行 MSBuild 支持。
*.targets
创建一个或多个以您的语言构建项目所需的MSBuild 。创建 VSPackage 以在 IDE 中实现对 MSBuild 项目的支持。这将允许 Visual Studio 使用您选择的扩展名打开/保存/关闭项目文件。
创建一个或多个“项目模板”以允许用户在 IDE 中为您的语言创建一个新项目。
创建一个或多个“项目项模板”以允许用户轻松地将文件添加到项目中。
这个答案现在只是表面上,但你问了一个非常广泛的问题,不幸的是我现在没有时间详细介绍这方面的各个方面。
编辑:关于部署 - 您可以并且应该将您的 VSPackage 包含在 VSIX 中。但是,由于您的扩展需要在用户项目具有标准访问权限(C:\Program Files\MSBuild
或C:\Program Files (x86)\MSBuild
)的位置安装 MSBuild 扩展,因此您必须将整个内容包装在安装程序中以提供自定义安装。我建议为此使用 WiX;它不是微不足道的,但它是免费的,工作异常可靠,并且一旦你掌握了它就不会太难使用。
不幸的是,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。