public override void RunFinished()
        {
            using (ThreadedWaitDialogProgressScope scope = new ThreadedWaitDialogProgressScope("Checking installed packages..."))
            {
                _packageService.InstallLatestPackages(scope, _currentProject);
            }


            using (ThreadedWaitDialogProgressScope scope = new ThreadedWaitDialogProgressScope("Checking resolved references..."))
            {
                // _referenceService.AddRequiredReferences(scope,_currentProject);

                Service.ReferenceService.EnsureReferences(scope, ReferencesOption.Common, _currentProject);
                Service.ReferenceService.EnsureReferences(scope, ReferencesOption.MSBuild, _currentProject);
                Service.ReferenceService.EnsureReferences(scope, ReferencesOption.Wpf, _currentProject);
                Service.ReferenceService.EnsureReferences(scope, ReferencesOption.EnvDTE, _currentProject);
                Service.ReferenceService.EnsureReferences(scope, ReferencesOption.Shell, _currentProject);
            }

            foreach (Reference reference in _project.References)
            {
                if (reference.Name.StartsWith("envdte", System.StringComparison.CurrentCultureIgnoreCase) ||
                    reference.Name.StartsWith("vslangproj", System.StringComparison.CurrentCultureIgnoreCase))
                {
                    if (reference is Reference5 reference5)
                    {
                        reference5.EmbedInteropTypes = false;
                    }
                }
            }

            Refresher.RefreshProject(_currentProject);
        }
 public void InstallLatestPackages(ThreadedWaitDialogProgressScope scope, Project project)
 {
     foreach (string packageId in packageIdList)
     {
         scope.Update(
             "Checking Packages",
             $"Checking if package {packageId} is installed",
             $"Checking if package {packageId} is installed",
             true
             );
         if (GlobalServices.InstallerServices.IsPackageInstalled(project, packageId))
         {
             continue;
         }
         try
         {
             scope.Update(
                 "Installing Package",
                 $"Installing latest package {packageId}",
                 $"Installing latest package {packageId}",
                 true
                 );
             GlobalServices.PackageInstaller2.InstallLatestPackage(null, project, packageId, true, false);
         }
         catch (Exception e)
         {
             Debug.Print(e.Message);
         }
     }
 }
        public void AddRequiredReferences(ThreadedWaitDialogProgressScope scope, Project project)
        {
            VSProject vsproject = project.Object as VSProject;

            string[] referenceNames = GetReferences(vsproject).Select(r => r.Name).ToArray();
            foreach (KeyValuePair <string, string> kvp in ReferenceDictionary)
            {
                scope.Update(
                    "Checking Reference",
                    $"Checking if reference {kvp.Key} has resolved",
                    $"Checking if reference {kvp.Key} has resolved",
                    true
                    );
                IEnumerable <string> enumerable = referenceNames;
                if (!enumerable.Contains(kvp.Key))
                {
                    try
                    {
                        scope.Update(
                            "Adding Reference",
                            $"Adding reference {kvp.Key} with path {kvp.Value}",
                            $"Adding reference {kvp.Key} with path {kvp.Value}",
                            true
                            );
                        Reference newreference = vsproject.References.Add(kvp.Value);
                    }
                    catch (Exception e)
                    {
                        Debug.Print(e.Message);
                    }
                }
            }
        }
        private static void GenerateXamlPropertyRuleProjectItemsSchema(ThreadedWaitDialogProgressScope scope, ProjectItem folder, string content, string fileName)
        {
            scope.Update("Generating XamlPropertyRuleProjectItemsSchema", $"Creating {fileName}", $"Creating {fileName}", true);
            string directory            = folder.FileNames[0];
            string xamlPropertyRulePath = Path.Combine(directory, fileName);

            File.WriteAllText(xamlPropertyRulePath, content);
            SetXamlPropertyRuleProjectItemsSchemaBuildProperties(folder.ProjectItems.AddFromFile(xamlPropertyRulePath));
        }
        private static void GenerateXamlPropertyRuleCore(ThreadedWaitDialogProgressScope scope, ProjectItem folder, string content, string fileName)
        {
            scope.Update("Generating XamlPropertyRule", $"Creating {fileName}", $"Creating {fileName}", true);
            string directory            = folder.FileNames[0];
            string xamlPropertyRulePath = Path.Combine(directory, fileName);
            string codeBehindFilePath   = Path.Combine(directory, $"{fileName}.cs");
            string rootNamespace        = folder.ContainingProject.Properties.Item("DefaultNamespace").Value.ToString();
            string codeBehindContent    = GenerateCodeBehindContent(Path.GetFileNameWithoutExtension(fileName), rootNamespace);

            File.WriteAllText(xamlPropertyRulePath, content);
            scope.Update("Generating XamlPropertyRule CodeBehind", $"Creating {fileName}.cs", $"Creating {fileName}.cs", true);
            File.WriteAllText(codeBehindFilePath, codeBehindContent);
            SetXamlPropertyRuleBuildProperties(folder.ProjectItems.AddFromFile(xamlPropertyRulePath));
        }
        protected override void RunStartedCore(Dictionary <string, string> replacementsDictionary)
        {
            using (ThreadedWaitDialogProgressScope scope = new ThreadedWaitDialogProgressScope("Generating XamlPropertyRules"))
            {
                ProjectItem rulesFolder          = GetOrCreateRulesFolder();
                IXamlPropertyRuleContext context = XamlPropertyRuleFactory.CreateXamlPropertyRuleContext();

                XamlPropertyRuleGenerator.GenerateXamlPropertyRule(scope, rulesFolder, context.AnalyzerReferenceContent, "AnalyzerReference.xaml");
                XamlPropertyRuleGenerator.GenerateXamlPropertyRule(scope, rulesFolder, context.AppDesignerContent, "AppDesigner.xaml");
                XamlPropertyRuleGenerator.GenerateXamlPropertyRule(scope, rulesFolder, context.AssemblyInfoContent, "AssemblyInfo.xaml");
                XamlPropertyRuleGenerator.GenerateXamlPropertyRule(scope, rulesFolder, context.AssemblyReferenceContent, "AssemblyReference.xaml");
                XamlPropertyRuleGenerator.GenerateXamlPropertyRule(scope, rulesFolder, context.CompilerCommandLineArgsContent, "CompilerCommandLineArgs.xaml");
                XamlPropertyRuleGenerator.GenerateXamlPropertyRule(scope, rulesFolder, context.COMReferenceContent, "COMReference.xaml");
                XamlPropertyRuleGenerator.GenerateXamlPropertyRule(scope, rulesFolder, context.ConfigurationGeneralContent, "ConfigurationGeneral.xaml");
                XamlPropertyRuleGenerator.GenerateXamlPropertyRule(scope, rulesFolder, context.ConfigurationGeneralFileContent, "ConfigurationGeneralFile.xaml");
                XamlPropertyRuleGenerator.GenerateXamlPropertyRule(scope, rulesFolder, context.ContentContent, "Content.xaml");
                XamlPropertyRuleGenerator.GenerateXamlPropertyRule(scope, rulesFolder, context.CSharpContent, "CSharp.xaml");
                XamlPropertyRuleGenerator.GenerateXamlPropertyRule(scope, rulesFolder, context.DebuggerGeneralContent, "DebuggerGeneral.xaml");
                XamlPropertyRuleGenerator.GenerateXamlPropertyRule(scope, rulesFolder, context.DotNetCliToolReferenceContent, "DotNetCliToolReference.xaml");
                XamlPropertyRuleGenerator.GenerateXamlPropertyRule(scope, rulesFolder, context.EmbeddedResourceContent, "EmbeddedResource.xaml");
                XamlPropertyRuleGenerator.GenerateXamlPropertyRule(scope, rulesFolder, context.FolderContent, "Folder.xaml");
                XamlPropertyRuleGenerator.GenerateXamlPropertyRule(scope, rulesFolder, context.NoneContent, "None.xaml");
                XamlPropertyRuleGenerator.GenerateXamlPropertyRule(scope, rulesFolder, context.NuGetRestoreContent, "NuGetRestore.xaml");
                XamlPropertyRuleGenerator.GenerateXamlPropertyRule(scope, rulesFolder, context.PackageReferenceContent, "PackageReference.xaml");
                XamlPropertyRuleGenerator.GenerateXamlPropertyRule(scope, rulesFolder, context.ProjectDebuggerContent, "ProjectDebugger.xaml");
                XamlPropertyRuleGenerator.GenerateXamlPropertyRule(scope, rulesFolder, context.ProjectReferenceContent, "ProjectReference.xaml");
                XamlPropertyRuleGenerator.GenerateXamlPropertyRule(scope, rulesFolder, context.PSDbgContent, "PSDbg.xaml");
                XamlPropertyRuleGenerator.GenerateXamlPropertyRule(scope, rulesFolder, context.ResolvedAnalyzerReferenceContent, "ResolvedAnalyzerReference.xaml");
                XamlPropertyRuleGenerator.GenerateXamlPropertyRule(scope, rulesFolder, context.ResolvedAssemblyReferenceContent, "ResolvedAssemblyReference.xaml");
                XamlPropertyRuleGenerator.GenerateXamlPropertyRule(scope, rulesFolder, context.ResolvedCOMReferenceContent, "ResolvedCOMReference.xaml");
                XamlPropertyRuleGenerator.GenerateXamlPropertyRule(scope, rulesFolder, context.ResolvedPackageReferenceContent, "ResolvedPackageReference.xaml");
                XamlPropertyRuleGenerator.GenerateXamlPropertyRule(scope, rulesFolder, context.ResolvedProjectReferenceContent, "ResolvedProjectReference.xaml");
                XamlPropertyRuleGenerator.GenerateXamlPropertyRule(scope, rulesFolder, context.ResolvedSdkReferenceContent, "ResolvedSdkReference.xaml");
                XamlPropertyRuleGenerator.GenerateXamlPropertyRule(scope, rulesFolder, context.SdkReferenceContent, "SdkReference.xaml");
                XamlPropertyRuleGenerator.GenerateXamlPropertyRule(scope, rulesFolder, context.SourceControlContent, "SourceControl.xaml");
                XamlPropertyRuleGenerator.GenerateXamlPropertyRule(scope, rulesFolder, context.SpecialFolderContent, "SpecialFolder.xaml");
                XamlPropertyRuleGenerator.GenerateXamlPropertyRule(scope, rulesFolder, context.SubProjectContent, "SubProject.xaml");


                XamlPropertyRuleGenerator.GenerateXamlPropertyRule(scope, rulesFolder, context.GeneralBrowseObjectContent, "GeneralBrowseObject.xaml", XamlPropertyRuleOption.XamlPropertyRuleNoCodeBehind);
                XamlPropertyRuleGenerator.GenerateXamlPropertyRule(scope, rulesFolder, context.CSharpBrowseObjectContent, "CSharpBrowseObject.xaml", XamlPropertyRuleOption.XamlPropertyRuleNoCodeBehind);
                XamlPropertyRuleGenerator.GenerateXamlPropertyRule(scope, rulesFolder, context.ProjectItemsSchemaContent, "ProjectItemsSchema.xaml", XamlPropertyRuleOption.XamlPropertyRuleProjectItemsSchema);
                XamlPropertyRuleGenerator.GenerateXamlPropertyRule(scope, rulesFolder, context.CSharpProjectItemsSchemaContent, "CSharpProjectItemsSchema.xaml", XamlPropertyRuleOption.XamlPropertyRuleProjectItemsSchema);
            }
        }
        public static void GenerateXamlPropertyRule(ThreadedWaitDialogProgressScope scope, ProjectItem folder, string content, string fileName, XamlPropertyRuleOption option = XamlPropertyRuleOption.XamlPropertyRule)
        {
            switch (option)
            {
            case XamlPropertyRuleOption.XamlPropertyRule:
                GenerateXamlPropertyRuleCore(scope, folder, content, fileName);
                break;

            case XamlPropertyRuleOption.XamlPropertyRuleNoCodeBehind:
                GenerateXamlPropertyRuleNoCodeBehind(scope, folder, content, fileName);
                break;

            case XamlPropertyRuleOption.XamlPropertyRuleProjectItemsSchema:
                GenerateXamlPropertyRuleProjectItemsSchema(scope, folder, content, fileName);
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(option), option, null);
            }
        }
Example #8
0
        public void EnsureReferences(ThreadedWaitDialogProgressScope scope, ReferencesOption option, Project project)
        {
            IEnumerable <MetadataReference>   optionReferences  = GetList(option);
            ImmutableList <MetadataReference> currentReferences = project.MetadataReferences.ToImmutableList();

            foreach (MetadataReference reference in optionReferences)
            {
                scope.Update(
                    "Checking References",
                    $"Checking if reference {reference.Display} has resolved",
                    $"Checking if reference {reference.Display} has resolved",
                    true
                    );
                if (currentReferences.Contains(reference))
                {
                    continue;
                }

                scope.Update(
                    "Adding References",
                    $"Adding reference {reference.Display}",
                    $"Adding reference {reference.Display}"

                    );


                project = project.AddMetadataReference(reference);

                try
                {
                    _workspace.TryApplyChanges(project.Solution);
                }
                catch (Exception e)
                {
                    Debug.Print(e.Message);
                }
            }
        }
Example #9
0
        public void EnsureReferences(ThreadedWaitDialogProgressScope scope, ReferencesOption option, EnvDTE.Project project)
        {
            Project newProject = EquivalencyProvider.GetEquivalent(project);

            EnsureReferences(scope, option, newProject);
        }