首页 > 解决方案 > 如何在 VSIX 扩展中部署“扩展方法”?

问题描述

由于措辞(“扩展”和“方法”的许多含义),我完全无法在互联网上找到有关我的问题的任何信息。所以我在这里问:

是否可以使用 VSIX 扩展部署“扩展方法”?

澄清:通过“扩展方法”我的意思是

public static string SomextExtension(this string s, string p) {
   retrun s + p;
}

通过 VSIX 扩展,我指的是一个自定义扩展,它通过

SomeCoolExtension.vsix

目标是:用户安装 VSIX,获得一些功能(在我的例子中主要是自定义代码生成器),另外还可以访问"Hello".SomeExtension(" World");他们的源代码。

我慢慢地认为这是不可能的,因为我已经尝试了我能想出的一切,并且如开头所述,几乎不可能在谷歌上搜索它。

如果这真的是不可能的,我至少很想知道为什么。所以一个简单的“不”可能是一个有效的答案,但如果你能详细说明,那会让我的编码灵魂休息:-)

规格:我正在使用 VS2017 和新的“Visual Studio AsyncPackage”,但如果您知道旧版本的答案,我很乐意尝试它们。

标签: c#extension-methodsvsix

解决方案


您可以使用这两种方法:

  • 扩展名 (.vsix) 提供了最大的灵活性,因为它可以提供命令(菜单、上下文菜单和工具栏上的按钮),根据用户的需要,可以 1) 在活动文档中插入代码 2) 添加带有代码的文件或其他资产 3) 添加对可以在项目的源文件夹中部署的 Dll 的引用等。此外,它不仅可以按需执行所有操作,还可以自动监视事件并检查是否满足某些条件,例如,创建一个解决方案,或者加载一个解决方案,添加一个项目,它是否已经包含一个代码文件,它是否已经有一个引用等等。不用说,所有这些灵活性都来自一些复杂性。

  • NuGet 包可以将 DLL 添加到项目的引用或代码文件,当 NuGet 包添加到可以修改项目的项目时,它可以执行 PowerShell 脚本,它可以修改构建过程添加新的 MSBuild 目标/任务(作为 Microsoft.VSSDK.BuildTools NuGet 包创建 VSIX 扩展的主要示例)。这是在项目安装过程中的一次性操作。之后,没有事件,没有命令等,但对于大多数场景来说要简单得多。


推荐阅读