C# VSIX ErrorListProvider任务列表为空
我正在尝试使用SDK创建一个VisualStudio扩展,创建一个VSIX包。我正在使用Microsoft Visual Studio 2019预览版;版本16.7.0预览版1.0C# VSIX ErrorListProvider任务列表为空,c#,visual-studio,vsix,C#,Visual Studio,Vsix,我正在尝试使用SDK创建一个VisualStudio扩展,创建一个VSIX包。我正在使用Microsoft Visual Studio 2019预览版;版本16.7.0预览版1.0 private readonly AsyncPackage package; private void Test1() { ThreadHelper.ThrowIfNotOnUIThread(); var ivsSolution = (IVsSolution)Package.GetGlobalSe
private readonly AsyncPackage package;
private void Test1()
{
ThreadHelper.ThrowIfNotOnUIThread();
var ivsSolution = (IVsSolution)Package.GetGlobalService(typeof(IVsSolution));
var dte = (EnvDTE80.DTE2)Package.GetGlobalService(typeof(EnvDTE.DTE));
var errorListProvider = new ErrorListProvider(package);
var tasks = errorListProvider.Tasks.Count;
}
最后一行的计算结果为零,即使错误窗口显示许多错误。
我做错了什么
谢谢,ErrorListProvider向错误列表工具窗口提供错误。要显示(或访问)现有错误,可以按照Klaus的建议使用ToolWindows.ErrorList。文档中的示例代码不完全正确。它看起来像是从一个已经过时的自定义外接程序项目中提取出来的。对于那些较旧的外接程序项目,applicationObject通常引用DTE接口 从VSSDK包中,您可以执行以下类似操作:
using System;
using System.ComponentModel.Design;
using System.Runtime.InteropServices;
using System.Threading;
using Microsoft;
using Microsoft.VisualStudio.Shell;
using Microsoft.VisualStudio.Shell.Interop;
using Task = System.Threading.Tasks.Task;
using EnvDTE80;
namespace GetErrorsDemo
{
[PackageRegistration(UseManagedResourcesOnly = true, AllowsBackgroundLoading = true)]
[Guid(GetErrorsDemoPackage.PackageGuidString)]
[ProvideMenuResource("Menus.ctmenu", 1)]
public sealed class GetErrorsDemoPackage : AsyncPackage
{
public const string PackageGuidString = "90adc626-67bd-42d5-babc-6e4c5aa6e351";
public static readonly Guid CommandSet = new Guid("5a7f888e-8767-4a4a-a06b-1b06c4f1e3f4");
public const int ErrorsListCommand = 0x0100;
protected override async Task InitializeAsync(CancellationToken cancellationToken, IProgress<ServiceProgressData> progress)
{
await this.JoinableTaskFactory.SwitchToMainThreadAsync(cancellationToken);
// add our menu handler
OleMenuCommandService commandService = await this.GetServiceAsync(typeof(IMenuCommandService)) as OleMenuCommandService;
Assumes.Present(commandService);
var menuCommandID = new CommandID(CommandSet, ErrorsListCommand);
var menuItem = new MenuCommand(this.OnErrorsListCommand, menuCommandID);
commandService.AddCommand(menuItem);
}
private void OnErrorsListCommand(object sender, EventArgs e)
{
ThreadHelper.ThrowIfNotOnUIThread();
DTE2 dte = (DTE2)GetService(typeof(SDTE));
Assumes.Present(dte);
ErrorList errorList = dte.ToolWindows.ErrorList;
for (int i = 1; i <= errorList.ErrorItems.Count; i++)
{
string msg = string.Format("Description: {0}", errorList.ErrorItems.Item(i).Description);
VsShellUtilities.ShowMessageBox(this, msg, "GetErrors Demo", OLEMSGICON.OLEMSGICON_INFO, OLEMSGBUTTON.OLEMSGBUTTON_OK, OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST);
}
}
}
}
使用系统;
使用System.ComponentModel.Design;
使用System.Runtime.InteropServices;
使用系统线程;
使用微软;
使用Microsoft.VisualStudio.Shell;
使用Microsoft.VisualStudio.Shell.Interop;
使用Task=System.Threading.Tasks.Task;
使用EnvDTE80;
命名空间GetErrorsDemo
{
[PackageRegistration(UseManagedResourcesOnly=true,AllowsBackgroundLoading=true)]
[Guid(GetErrorsDemoPackage.PackageGuidString)]
[提供菜单资源(“Menus.ctmenu”,1)]
公共密封类GetErrorsDemoPackage:AsyncPackage
{
public const string PackageGuidString=“90adc626-67bd-42d5-babc-6e4c5aa6e351”;
公共静态只读Guid命令集=新Guid(“5a7f888e-8767-4a4a-a06b-1b06c4f1e3f4”);
public const int ErrorsListCommand=0x0100;
受保护的覆盖异步任务初始化同步(CancellationToken CancellationToken,IProgress progress)
{
等待此消息。JoinableTaskFactory.SwitchToMainThreadAsync(cancellationToken);
//添加我们的菜单处理程序
OleMenuCommandService commandService=将此.GetServiceAsync(typeof(IMenuCommandService))作为OleMenuCommandService等待;
假设。存在(命令服务);
var menuCommandID=newcommandid(CommandSet,ErrorsListCommand);
var menuItem=new MenuCommand(this.OnErrorsListCommand,MenuCommand);
commandService.AddCommand(menuItem);
}
私有void OnErrorsListCommand(对象发送方,事件参数e)
{
ThreadHelper.throwifnotunuithread();
DTE2 dte=(DTE2)GetService(typeof(SDTE));
假设存在(dte);
ErrorList ErrorList=dte.ToolWindows.ErrorList;
对于(int i=1;i)访问实际错误列表,您可以使用@KlausGütter在该链接的示例中如何获取_applicationObject?我看到您使用了基于1的数组。很好。