|
@@ -1,53 +1,37 @@
|
|
|
using Microsoft.VisualStudio.Shell;
|
|
using Microsoft.VisualStudio.Shell;
|
|
|
|
|
+using Microsoft.VisualStudio.Shell.Interop;
|
|
|
|
|
+using Quadarax.Application.Tools.Vsix.FilteredSolutionsExtension;
|
|
|
using System;
|
|
using System;
|
|
|
using System.Runtime.InteropServices;
|
|
using System.Runtime.InteropServices;
|
|
|
using System.Threading;
|
|
using System.Threading;
|
|
|
using Task = System.Threading.Tasks.Task;
|
|
using Task = System.Threading.Tasks.Task;
|
|
|
|
|
|
|
|
-namespace FilteredSolutionsExtension
|
|
|
|
|
-{
|
|
|
|
|
- /// <summary>
|
|
|
|
|
- /// This is the class that implements the package exposed by this assembly.
|
|
|
|
|
- /// </summary>
|
|
|
|
|
- /// <remarks>
|
|
|
|
|
- /// <para>
|
|
|
|
|
- /// The minimum requirement for a class to be considered a valid package for Visual Studio
|
|
|
|
|
- /// is to implement the IVsPackage interface and register itself with the shell.
|
|
|
|
|
- /// This package uses the helper classes defined inside the Managed Package Framework (MPF)
|
|
|
|
|
- /// to do it: it derives from the Package class that provides the implementation of the
|
|
|
|
|
- /// IVsPackage interface and uses the registration attributes defined in the framework to
|
|
|
|
|
- /// register itself and its components with the shell. These attributes tell the pkgdef creation
|
|
|
|
|
- /// utility what data to put into .pkgdef file.
|
|
|
|
|
- /// </para>
|
|
|
|
|
- /// <para>
|
|
|
|
|
- /// To get loaded into VS, the package must be referred by <Asset Type="Microsoft.VisualStudio.VsPackage" ...> in .vsixmanifest file.
|
|
|
|
|
- /// </para>
|
|
|
|
|
- /// </remarks>
|
|
|
|
|
- [PackageRegistration(UseManagedResourcesOnly = true, AllowsBackgroundLoading = true)]
|
|
|
|
|
|
|
+namespace Quadarax.Application.Tools.Vsix.FilteredSolutionsExtension
|
|
|
|
|
+{ [PackageRegistration(UseManagedResourcesOnly = true, AllowsBackgroundLoading = true)]
|
|
|
[Guid(FilteredSolutionsExtensionPackage.PackageGuidString)]
|
|
[Guid(FilteredSolutionsExtensionPackage.PackageGuidString)]
|
|
|
|
|
+ [ProvideMenuResource("Menus.ctmenu", 1)]
|
|
|
|
|
+ [ProvideAutoLoad(UIContextGuids80.NoSolution, PackageAutoLoadFlags.BackgroundLoad)]
|
|
|
|
|
+ [ProvideAutoLoad(UIContextGuids80.SolutionExists, PackageAutoLoadFlags.BackgroundLoad)]
|
|
|
public sealed class FilteredSolutionsExtensionPackage : AsyncPackage
|
|
public sealed class FilteredSolutionsExtensionPackage : AsyncPackage
|
|
|
{
|
|
{
|
|
|
- /// <summary>
|
|
|
|
|
- /// FilteredSolutionsExtensionPackage GUID string.
|
|
|
|
|
- /// </summary>
|
|
|
|
|
- public const string PackageGuidString = "3fb488a4-d627-4ddd-a424-03f493cd0915";
|
|
|
|
|
|
|
+ public const string PackageGuidString = "12345678-1234-1234-1234-123456789abc";
|
|
|
|
|
+ private SolutionOpeningInterceptor _solutionInterceptor;
|
|
|
|
|
|
|
|
- #region Package Members
|
|
|
|
|
-
|
|
|
|
|
- /// <summary>
|
|
|
|
|
- /// Initialization of the package; this method is called right after the package is sited, so this is the place
|
|
|
|
|
- /// where you can put all the initialization code that rely on services provided by VisualStudio.
|
|
|
|
|
- /// </summary>
|
|
|
|
|
- /// <param name="cancellationToken">A cancellation token to monitor for initialization cancellation, which can occur when VS is shutting down.</param>
|
|
|
|
|
- /// <param name="progress">A provider for progress updates.</param>
|
|
|
|
|
- /// <returns>A task representing the async work of package initialization, or an already completed task if there is none. Do not return null from this method.</returns>
|
|
|
|
|
protected override async Task InitializeAsync(CancellationToken cancellationToken, IProgress<ServiceProgressData> progress)
|
|
protected override async Task InitializeAsync(CancellationToken cancellationToken, IProgress<ServiceProgressData> progress)
|
|
|
{
|
|
{
|
|
|
- // When initialized asynchronously, the current thread may be a background thread at this point.
|
|
|
|
|
- // Do any initialization that requires the UI thread after switching to the UI thread.
|
|
|
|
|
await this.JoinableTaskFactory.SwitchToMainThreadAsync(cancellationToken);
|
|
await this.JoinableTaskFactory.SwitchToMainThreadAsync(cancellationToken);
|
|
|
|
|
+
|
|
|
|
|
+ _solutionInterceptor = new SolutionOpeningInterceptor(this);
|
|
|
|
|
+ await _solutionInterceptor.InitializeAsync();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- #endregion
|
|
|
|
|
|
|
+ protected override void Dispose(bool disposing)
|
|
|
|
|
+ {
|
|
|
|
|
+ if (disposing)
|
|
|
|
|
+ {
|
|
|
|
|
+ _solutionInterceptor?.Dispose();
|
|
|
|
|
+ }
|
|
|
|
|
+ base.Dispose(disposing);
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|