首页 > 解决方案 > 通过 Visual Studio 2017 VSIX 项目构建 SQL Server Management Studio 扩展:为 AsyncPackage 类绕过 Initialiaze()

问题描述

我正在使用本指南通过 Visual Studio 2017 VSIX 项目构建 SSMS 扩展:https ://www.codeproject.com/Articles/1243356/Create-Your-Own-SQL-Server-Management-Studio-SSMS

但是,我被困在最后一步。我做了它所说的一切,但项目不会构建,因为我从 Initialize() 方法中收到以下错误消息:

protected override void Initialize()

  1. “HelloWorldCommandPackage.Initialize()”:无法覆盖继承的成员“AsyncPackage.Initialize()”,因为它是密封的。

似乎在 Visual Studio 2017 中创建一个新的 VSIX 项目使用 HelloWorldCommandPackage.cs 的“AsyncPackage”类来密封 Initialize() 方法。

文章中的那个人是为 Visual Studio 2015 编写的,它在创建新的 VSIX 项目时使用“包”类。创建主类后,我尝试实现“包”类,如下所示:

public sealed class HelloWorldCommandPackage: Package

但是,我收到这些错误:

  1. 错误 CS0115 'HelloWorldCommandPackage.InitializeAsync(CancellationToken, IProgress)':找不到合适的方法来覆盖 HelloWorldSsmsExtension

  2. 错误 VSSDK002 当且仅当包派生自 AsyncPackage 时,才应将 PackageRegistrationAttribute.AllowsBackgroundLoading 设置为 true。

  3. 错误 CS1061 'HelloWorldCommandPackage' 不包含 'JoinableTaskFactory' 的定义,并且找不到接受“HelloWorldCommandPackage”类型的第一个参数的可访问扩展方法“JoinableTaskFactory”(您是否缺少 using 指令或程序集引用?)

  4. 错误 CS1503 参数 1:无法从“HelloWorldSsmsExtension.HelloWorldCommandPackage”转换为“Microsoft.VisualStudio.Shell.AsyncPackage”

如何在 Visual Studio 2017 中完成这项工作?

标签: c#visual-studiovisual-studio-2017ssms

解决方案


方法覆盖仅在派生类中是可能的。因为在派生类中从基类重写了一个方法。方法必须是用于覆盖的非虚拟或静态方法。覆盖方法和虚拟方法都必须具有相同的访问级别修饰符。


推荐阅读