c# - 通过 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()
- “HelloWorldCommandPackage.Initialize()”:无法覆盖继承的成员“AsyncPackage.Initialize()”,因为它是密封的。
似乎在 Visual Studio 2017 中创建一个新的 VSIX 项目使用 HelloWorldCommandPackage.cs 的“AsyncPackage”类来密封 Initialize() 方法。
文章中的那个人是为 Visual Studio 2015 编写的,它在创建新的 VSIX 项目时使用“包”类。创建主类后,我尝试实现“包”类,如下所示:
public sealed class HelloWorldCommandPackage: Package
但是,我收到这些错误:
错误 CS0115 'HelloWorldCommandPackage.InitializeAsync(CancellationToken, IProgress)':找不到合适的方法来覆盖 HelloWorldSsmsExtension
错误 VSSDK002 当且仅当包派生自 AsyncPackage 时,才应将 PackageRegistrationAttribute.AllowsBackgroundLoading 设置为 true。
错误 CS1061 'HelloWorldCommandPackage' 不包含 'JoinableTaskFactory' 的定义,并且找不到接受“HelloWorldCommandPackage”类型的第一个参数的可访问扩展方法“JoinableTaskFactory”(您是否缺少 using 指令或程序集引用?)
错误 CS1503 参数 1:无法从“HelloWorldSsmsExtension.HelloWorldCommandPackage”转换为“Microsoft.VisualStudio.Shell.AsyncPackage”
如何在 Visual Studio 2017 中完成这项工作?
解决方案
方法覆盖仅在派生类中是可能的。因为在派生类中从基类重写了一个方法。方法必须是用于覆盖的非虚拟或静态方法。覆盖方法和虚拟方法都必须具有相同的访问级别修饰符。
推荐阅读
- image - 无法将图像数据写入路径 laravel live 项目
- groovy - 为什么 file.append 将“hello world”写为 csv 文件中的重复项
- java - 使用 Firebase 登录
- ruby-on-rails - Ruby on Rails:未初始化的常量
- c# - c#从Xtragrid导出到Xlsx时隐藏(垂直/水平)行
- webstorm - 在 WebStorm 中清理代码的键盘快捷键
- php - 在laravel中卷曲的网址是什么
- c# - 基于计时器更新集合 throws 'Collection was modified; 枚举操作可能无法执行。
- c# - 来自 C# 身份验证问题的 Google ML-Engine 预测
- android - 添加/删除我的科尔多瓦插件