Exemple #1
0
 private static XmlTransformableDocument OpenSourceFile(string sourceFile)
 {
     try
     {
         XmlTransformableDocument transformableDocument = new XmlTransformableDocument();
         transformableDocument.PreserveWhitespace = true;
         transformableDocument.Load(sourceFile);
         return(transformableDocument);
     }
     //catch (XmlException ex)
     //{
     //    VsService.OutputLine($"Failed to open {sourceFile}");
     //    throw;
     //}
     catch (Exception e)
     {
         VsService.OutputLine($"Failed to open {sourceFile}");
         throw;
     }
 }
Exemple #2
0
        // disclaimer: visual studio doesn't support adding dependent file under linked file
        // so no dependent transformed config under linked app.config in designer
        private static void CreateConfigFiles(Project project, ProjectItem projectItem)
        {
            var appConfigName           = projectItem.Name;
            var buildConfigurationNames = project.GetBuildConfigurationNames();
            // get app.config directory. new transform config will be created there.
            string path;

            if (projectItem.IsLink())
            {
                path = Directory.GetParent(projectItem.ContainingProject.FullName).FullName;
            }
            else
            {
                path = Directory.GetParent(projectItem.GetFullPath()).FullName;
            }

            foreach (var buildConfigurationName in buildConfigurationNames)
            {
                var dependentConfig         = GetTransformConfigName(appConfigName, buildConfigurationName);
                var dependentConfigFullPath = Path.Combine(path, dependentConfig);
                // check if config file exist
                if (FileWrapper.Exists(dependentConfigFullPath))
                {
                    VsService.OutputLine($"File {dependentConfig} already exists");
                }
                else
                {
                    using (var file = FileWrapper.AppendText(dependentConfigFullPath))
                    {
                        file.Write(DependencyConfigContent);
                    }
                    VsService.OutputLine($"File {dependentConfig} was added");
                }
                // add it to project file anyway, in case it was deleted just from project file
                projectItem.ProjectItems.AddFromFile(dependentConfigFullPath);
            }
        }
Exemple #3
0
        //TODO:[Golan] - break this method to small pieces
        public static bool EditProjectFile(ProjectItem projectItem)
        {
            string relativePrefix = null;

            // get dte from project item
            var dte = projectItem.DTE;

            try
            {
                // hide UI changes
                dte.SuppressUI = true;

                var isLinkAppConfig = projectItem.IsLink();

                var project = projectItem.ContainingProject;
                var createAsLinkedConfig = false;
                // check if its linked config
                if (isLinkAppConfig)
                {
                    // display yes/no message to user. yes - add as linked configs; no - add as concrete configs
                    var result = VsService.ShowMessageBox("Add as linked configs?",
                                                          OLEMSGBUTTON.OLEMSGBUTTON_YESNO,
                                                          OLEMSGICON.OLEMSGICON_QUERY);

                    // store relative path
                    relativePrefix = projectItem.GetRelativeDirectory();
                    if (result == MessageBoxResult.Yes)
                    {
                        createAsLinkedConfig = true;
                    }
                }

                if (createAsLinkedConfig)
                {
                    VsService.OutputLine("Add LinkedConfigFiles");
                    // since it's link files we only need to copy them as like files to project
                    CreateLinkedConfigFiles(projectItem);
                }
                else
                {
                    VsService.OutputLine("Add ConfigFiles");
                    // create missing config files
                    CreateConfigFiles(project, projectItem);
                }

                // we need to know if we saved the file when displaying message to user
                var changed = project.IsDirty;
                // save before making external changes to file
                if (changed)
                {
                    project.Save();
                }

                // project file(e.g. c:\myproject\myproject.csproj)
                var fileName = project.FullName;
                // config name (e.g. app.config or logging.config)
                var configName = projectItem.Name;

                ProjectXmlTransform.Open(fileName);
                VsService.OutputLine("Add UsingTask");
                ProjectXmlTransform.AddTransformTask();
                if (IsRootAppConfig(configName))
                {
                    VsService.OutputLine("Add AfterCompileTarget");
                    ProjectXmlTransform.AddAfterCompileTarget(configName, relativePrefix, createAsLinkedConfig);
                    VsService.OutputLine("Add AfterPublishTarget");
                    // project is a windows application or console application? if so add click once transform task
                    ProjectXmlTransform.AddAfterPublishTarget(configName, relativePrefix, createAsLinkedConfig);
                }
                else
                {
                    VsService.OutputLine("Add AfterBuildTarget");
                    ProjectXmlTransform.AddAfterBuildTarget(configName, relativePrefix, createAsLinkedConfig);
                }

                VsService.OutputLine("Check if need to save project file");
                // save project file
                var isSaved = ProjectXmlTransform.Save();
                // check if need to reload project, remember that we edit the project file externally
                if (isSaved)
                {
                    VsService.OutputLine("Done saving project file");
                    VsService.OutputLine("Reloading project file");
                    project.SaveReloadProject();
                }
                else
                {
                    VsService.OutputLine("No changes made in project file");
                }
                return(changed || isSaved);
            }
            finally
            {
                dte.SuppressUI = false;
            }
        }