Пример #1
0
        /// <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>
        protected override void Initialize()
        {
            base.Initialize();

            var dte = GetGlobalService(typeof(DTE)) as DTE2;

            Host.Instance.DTE = dte;
            Host.Instance.SolutionOpendAction = () =>
            {
                var sln      = Host.Instance.Solution2;
                var projects = dte.GetSolutionProjects().ToList();
                var sp       = new SolutionProperties
                {
                    Projects         = projects,
                    ClassicProjects  = projects.Where(p => !string.IsNullOrWhiteSpace(p.FileName) && p.IsNetFrameworkProject()).ToList(),
                    SdkBasedProjects = projects.Where(p => !string.IsNullOrWhiteSpace(p.FileName) && p.IsSdkBased()).ToList()
                };
                SolutionDataCache.Instance.AddOrUpdate(sln.FileName, sp, (k, v) =>
                {
                    v = sp;
                    return(v);
                });
            };

            AddNuSpecCommand.Initialize(this);
            NuGetDeployCommand.Initialize(this);
            AssemblyInfoEditCommand.Initialize(this);
            AddDirectoryBuildPropsCommand.Initialize(this);

            //LoadCustomCommands();
        }
Пример #2
0
        protected override async Task  InitializeAsync(CancellationToken cancellationToken, IProgress <ServiceProgressData> progress)
        {
            await JoinableTaskFactory.SwitchToMainThreadAsync(cancellationToken);

            var dte = GetGlobalService(typeof(DTE)) as DTE2;

            Host.Instance.DTE = dte;

            bool isSolutionLoaded = await IsSolutionLoadedAsync();

            if (isSolutionLoaded)
            {
                HandleOpenSolution();
            }

            // Listen for subsequent solution events
            Microsoft.VisualStudio.Shell.Events.SolutionEvents.OnAfterOpenSolution += HandleOpenSolution;


            dte.Events.SolutionEvents.ProjectAdded += p =>
            {
                if (string.IsNullOrWhiteSpace(p.FileName) ||
                    !Common.SupportedProjectTypes.Any(t => p.FileName.EndsWith(t, StringComparison.OrdinalIgnoreCase)))
                {
                    return;
                }
                var sln = Host.Instance.Solution2;
                SolutionDataCache.Instance.TryGetValue(sln.FileName, out var sp);
                sp?.AddProject(p);
            };
            dte.Events.SolutionEvents.ProjectRemoved += p =>
            {
                var sln = Host.Instance.Solution2;
                SolutionDataCache.Instance.TryGetValue(sln.FileName, out var sp);
                sp?.RemoveProject(p);
            };

            //var commandService =  await this.GetServiceAsync(typeof(IMenuCommandService)) as OleMenuCommandService;

            AddNuSpecCommand.Initialize(this);
            NuGetDeployCommand.Initialize(this);
            AssemblyInfoEditCommand.Initialize(this);
            AddDirectoryBuildPropsCommand.Initialize(this);
        }
Пример #3
0
 public AddDirectoryBuildPropsMenu()
 {
     Id               = this.GetType().Name;
     AttachTo         = "Solution";
     Text             = "Add Directory.Build.props";
     Position         = -8;
     Command          = new AddDirectoryBuildPropsCommand();
     UnavailableState = ControlUnavailableState.Invisbile;
     DependentItems   = DependentItems.SolutionProject;
     Action           = () => Command.Execute();
     EnabledFunc      = () =>
     {
         var sln = Host.Instance.DTE.Solution;
         if (sln == null)
         {
             return(false);
         }
         return(sln.Projects.Cast <Project>().Any(p => !string.IsNullOrWhiteSpace(p.FileName) && p.IsSdkBased()) && !File.Exists(sln.GetDirectoryBuildPropsPath()));
     };
 }