1

Visual studio plugin を開発しています。クラスOnConnection()のメソッドにビジュアルスタジオアドインオプションを設定しています。Connect.cs

host開いているプロジェクトに基づいて、アドイン オプションを無効にします。

たとえば、web project開いている場合にオプションを有効にします。それ以外の場合は、無効にする必要があります。

どのクラスでこれを達成できますかevent?connect.cs

4

1 に答える 1

1

これでうまくいくはずです:

    _applicationObject.Events.SolutionEvents.Opened += new _dispSolutionEvents_OpenedEventHandler(openedSolution);
    _applicationObject.Events.SolutionEvents.AfterClosing += new _dispSolutionEvents_AfterClosingEventHandler(closedSolution);

MSDN の「内部」リファレンス: http://msdn.microsoft.com/de-de/library/EnvDTE.aspx

次のコードでプロジェクトのタイプを特定できます ( http://www.mztools.com/articles/2007/mz2007016.aspxから)。

public string GetProjectTypeGuids(EnvDTE.Project proj)
    {

        string projectTypeGuids = "";
        object service = null;
        Microsoft.VisualStudio.Shell.Interop.IVsSolution solution = null;
        Microsoft.VisualStudio.Shell.Interop.IVsHierarchy hierarchy = null;
        Microsoft.VisualStudio.Shell.Interop.IVsAggregatableProject aggregatableProject = null;
        int result = 0;

        service = GetService(proj.DTE, typeof(Microsoft.VisualStudio.Shell.Interop.IVsSolution));
        solution = (Microsoft.VisualStudio.Shell.Interop.IVsSolution)service;

        result = solution.GetProjectOfUniqueName(proj.UniqueName, hierarchy);

        if (result == 0)
        {
            aggregatableProject = (Microsoft.VisualStudio.Shell.Interop.IVsAggregatableProject)hierarchy;
            result = aggregatableProject.GetAggregateProjectTypeGuids(projectTypeGuids);
        }

        return projectTypeGuids;

    }

    public object GetService(object serviceProvider, System.Type type)
    {
        return GetService(serviceProvider, type.GUID);
    }

    public object GetService(object serviceProviderObject, System.Guid guid)
    {

        object service = null;
        Microsoft.VisualStudio.OLE.Interop.IServiceProvider serviceProvider = null;
        IntPtr serviceIntPtr;
        int hr = 0;
        Guid SIDGuid;
        Guid IIDGuid;

        SIDGuid = guid;
        IIDGuid = SIDGuid;
        serviceProvider = (Microsoft.VisualStudio.OLE.Interop.IServiceProvider)serviceProviderObject;
        hr = serviceProvider.QueryService(SIDGuid, IIDGuid, serviceIntPtr);

        if (hr != 0)
        {
            System.Runtime.InteropServices.Marshal.ThrowExceptionForHR(hr);
        }
        else if (!serviceIntPtr.Equals(IntPtr.Zero))
        {
            service = System.Runtime.InteropServices.Marshal.GetObjectForIUnknown(serviceIntPtr);
            System.Runtime.InteropServices.Marshal.Release(serviceIntPtr);
        }

        return service;
    }

ここに既知の GUID のリストがあります。

openedSolutionオプションを無効にするには、メソッドの Type (GUID を確認) に関する menuentry を削除または追加します。

于 2013-07-03T11:45:34.423 に答える