【发布时间】:2012-12-13 15:48:50
【问题描述】:
我有 Win7 64 位,Visual Studio 2010,我为 Vs2010 开发了一个插件。
我尝试在 Windows VS 错误列表中显示消息。
我在 Addin 的 OnBuildProjConfigDone 构建事件中使用 ErrorListProvider
this._buildEvents.OnBuildProjConfigDone += new _dispBuildEvents_OnBuildProjConfigDoneEventHandler(_buildEvents_OnBuildProjConfigDone);
我收到此错误 InvalidOperationException
服务“Microsoft.VisualStudio.Shell.Interop.IVsTaskList”必须是 安装此功能才能正常工作。确保该服务是 可用。
连接
public partial class Connect : IDTExtensibility2, IDTCommandTarget, System.Windows.Forms.IWin32Window, IOleCommandTarget
OnBuildProjConfigDone
void _buildEvents_OnBuildProjConfigDone(string project, string projectConfig, string platform, string solutionConfig, bool success)
{
// Omitted
if (!resul)
{
project.DTE.ExecuteCommand("Build.Cancel");
var errorListHelper = new ErrorListHelper();
ErrorListProvider errorProvider = errorListHelper.GetErrorListProvider();
var newError = new ErrorTask();
newError.ErrorCategory = TaskErrorCategory.Message;
newError.Category = TaskCategory.BuildCompile;
newError.Text = "Cualquier mensaje de error aqui";
errorProvider.Tasks.Add(newError);
}
}
ErrorListHelper
public class ErrorListHelper : System.IServiceProvider
{
public ErrorListProvider GetErrorListProvider()
{
ErrorListProvider provider = new ErrorListProvider(this);
provider.ProviderName = "Provider";
provider.ProviderGuid = System.Guid.NewGuid();
return provider;
}
public object GetService(Type serviceType)
{
return Package.GetGlobalService(serviceType);
}
}
@JohnL 的建议:我在 GetService 方法中设置了一个断点,Package.GetGlobalService 正在返回 null。
有什么建议吗?
【问题讨论】:
-
这很奇怪,我正要发布一个关于这个确切问题的问题(或者,至少,我认为这是同一个问题)。就我而言,
errorProvider.Tasks.Add正在抛出InvalidOperationException,并带有该错误消息。你能在GetService方法中设置一个断点,看看Package.GetGlobalService是否返回null?塔! -
只是我已经确认相同的代码在 VS2008 和 2010 VSPackage 中有效。 (稍作修改,因为 Package 已经有一个 GetService 方法)。 VS2010 可能需要稍微不同的 GetService 实现。
标签: visual-studio-2010 visual-studio visual-studio-addins build-events error-list