1

私は Win7 64 ビット、Visual Studio 2010 を使用しており、Vs2010 用のアドインを開発しました。

エラーリストWindows VSでメッセージを表示してみます。
アドインの 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);
 }
}      

エラーリストヘルパー

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 を返しています

助言がありますか?

4

1 に答える 1

0

Ryan Molden (MSFT) は次のように述べています。

Package.GetGlobalService は、少なくとも 1 つの MPF パッケージ (参照している MPF の特定のバージョンから) が読み込まれていることに依存しています。あなた自身はパッケージではなくアドインであるため、それを保証することはできません。

ErrorListProvide の引数として new ServiceProvider((Microsoft.VisualStudio.OLE.Interop.IServiceProvider))) のようなものを渡す必要があります

Package.GetGlobalService が null を返しています。

このコードをアドインで使用します。私はそれをテストし、エラーが発生せず、エラーと警告を ErrorList Windows VS に表示できます。安全のためにもっとテストします。

 public partial class Connect
    {
        ErrorListProvider _errorListProvider = null;

        void CreateErrorListProvider()
        {
            if (_errorListProvider == null)
            {
                System.IServiceProvider serviceProvider = new ServiceProvider(_applicationObject as Microsoft.VisualStudio.OLE.Interop.IServiceProvider);
                _errorListProvider = new ErrorListProvider(serviceProvider);
                _errorListProvider.ProviderName = "custom Errors";
                _errorListProvider.ProviderGuid = new Guid("xxxxxxxxxxxxxx");

            }
        }
于 2012-12-13T07:48:50.620 に答える