由于措辞(“扩展名”和“方法”的许多含义),我完全无法在互连网上找到有关我的问题的任何信息。所以我在这里问:
是否可以部署具有VSIX扩展名的“扩展名方法”?
说明: “扩展方法”是指类似
public static string SomextExtension(this string s, string p) {
retrun s + p;
}
通过VSIX扩展,我指的是一个自定义扩展,该扩展是通过
安装的SomeCoolExtension.vsix
目标是:
用户安装了VSIX,获得了一些功能(在我的情况下主要是自定义代码生成器),并且还可以在其源代码中访问"Hello".SomeExtension(" World");
。
我慢慢地认为这是不可能的,因为我已经尽力想出一切,而且正如开头所述,实际上不可能在谷歌搜索它。
如果确实不可能,我至少愿意理解原因。 因此,简单的“否”可能是一个有效的答案,但是如果您能详细说明,那将使我的编码灵魂安息:-)
规格:我正在使用VS2017和新的“ Visual Studio AsyncPackage”,但是如果您知道旧版本的答案,我将很乐意尝试它们。
答案 0 :(得分:1)
您可以使用两种方法:
扩展名(.vsix)提供了最大的灵活性,因为它可以提供命令(菜单,上下文菜单和工具栏上的按钮),这些命令可以根据用户的需要1)在活动文档中插入代码2 )添加带有代码或其他资产的文件3)添加对Dll的引用,扩展可以将其部署到项目的源文件夹中,等等。此外,它不仅可以按需执行所有操作,还可以自动监视事件并检查某些条件例如,已经创建了一个解决方案,或者已经加载了一个解决方案,添加了一个项目,它是否已经包含代码文件,是否已经有引用,等等。不用说,所有这些灵活性都来自于某种复杂性。
NuGet程序包可以将DLL添加到引用或项目的代码文件中,可以在将NuGet程序包添加到可以修改项目的项目中时执行PowerShell脚本,还可以修改生成过程新的MSBuild目标/任务(是Microsoft.VSSDK.BuildTools NuGet程序包,用于创建VSIX扩展的主要示例)。这是在项目上安装期间的一次性操作。之后,没有事件,没有命令等,但是对于大多数情况而言,要简单得多。