/// <summary>
        /// Создаёт папку Release.
        /// </summary>
        /// <param name="dir"></param>
        public DirectoryInfo CreateReleaseDirectory(DirectoryInfo dir, bool confirmIfExists)
        {
            if (dir == null)
            {
                throw new ArgumentNullException(nameof(dir));
            }

            DirectoryInfo releaseDirectory = new DirectoryInfo(Path.Combine(dir.FullName, "R - " + this.FolderModuleName));

            if (!releaseDirectory.Exists)
            {
                releaseDirectory.Create();
            }
            else if (confirmIfExists)
            {
                if (!WSSDeveloperPackage.ShowUserConfirmYesNo($"Папка\n{releaseDirectory.FullName}\nуже существует. Заменить?", $"Папка {releaseDirectory.Name} уже существует"))
                {
                    return(null);
                }
            }

            foreach (ProjectItem item in this.ReleaseFolder.ProjectItems)
            {
                string sourcePath = item.GetFullPath();
                string targetPath = Path.Combine(releaseDirectory.FullName, item.Name);
                this.CopyAndOverwrite(sourcePath, targetPath);
            }

            if (this.DeployFolder != null)
            {
                this.EnsureFile(this.DeployFolder, releaseDirectory, "uninstall.bat", Constants.UninstallBatContent, Encoding.ASCII);
                this.EnsureFile(this.DeployFolder, releaseDirectory, "setup.bat", Constants.SetupBatContent, Encoding.ASCII);
            }
            return(releaseDirectory);
        }
        /// <summary>
        /// Создаёт папку Sources.
        /// </summary>
        /// <param name="dir"></param>
        public void CreateSourcesDirectory(DirectoryInfo dir, bool confirmIfExists)
        {
            if (dir == null)
            {
                throw new ArgumentNullException(nameof(dir));
            }

            DirectoryInfo sourcesDirectory = new DirectoryInfo(Path.Combine(dir.FullName, "S - " + this.FolderModuleName));

            if (!sourcesDirectory.Exists)
            {
                sourcesDirectory.Create();
            }
            else
            {
                if (confirmIfExists)
                {
                    if (!WSSDeveloperPackage.ShowUserConfirmYesNo($"Папка\n{sourcesDirectory.FullName}\nуже существует. Заменить?", $"Папка {sourcesDirectory.Name} уже существует"))
                    {
                        return;
                    }
                }
            }

            string zipFilePath = Path.Combine(sourcesDirectory.FullName, this.FileModuleName + ".zip");

            this.DeleteFile(zipFilePath);

            DirectoryInfo projectDir = new DirectoryInfo(this.Project.GetProjectFolder());

            try
            {
                ZipFile.CreateFromDirectory(projectDir.FullName, zipFilePath,
                                            CompressionLevel.Optimal,
                                            true,
                                            Encoding.UTF8);
            }
            catch (Exception ex)
            {
                Debug.WriteLine("Не удалось сформировать S архив: " + ex);

                // Удаляем возможно частично сформированный архив
                this.DeleteFile(zipFilePath);

                //копируем в %temp% и формируем архив оттуда
                this.CreateZipFromTempCopy(projectDir, zipFilePath);
            }
        }
Exemple #3
0
        /// <summary>
        /// Срабатывает при выполнении команды.
        /// </summary>
        protected override void OnExecute()
        {
            ThreadHelper.ThrowIfNotOnUIThread();

            var copiedFiles = new List <string>();

            //копируем из папки с результатами билда все файлы, которые есть в папке Release
            string outputPath = this.DTEInfo.SelectedProject.ConfigurationManager.ActiveConfiguration.Properties.Item("OutputPath")?.Value?.ToString() ?? "bin";

            foreach (ProjectItem releaseFile in this.Release.ProjectItems.OfType <ProjectItem>())
            {
                _CopyFile(outputPath, releaseFile.Name, releaseFile);
            }

            // Копирум WSP, если есть
            _CopyFile("Deploy", this.WSPFileName, this.Release.GetChildItem(this.WSPFileName));

            // Пишем, какие файлы были скопированы
            if (copiedFiles.Count > 0)
            {
                this.WriteToOutput("\nСледующие файлы были скопированы в Release:\n\t"
                                   + String.Join("\n\t", copiedFiles.ToArray()));
            }
            else
            {
                this.WriteToOutput("Ни один файл не был скопирован в Release.");
            }

            // Выполняет копирование файла.
            void _CopyFile(string dir, string name, ProjectItem projItem)
            {
                FileInfo sourceFile = this.GetFile(dir, name, SearchOption.TopDirectoryOnly);

                if (sourceFile != null)
                {
                    if (String.Equals(sourceFile.Extension, ".config", StringComparison.InvariantCultureIgnoreCase))
                    {
                        if (!WSSDeveloperPackage.ShowUserConfirmYesNo($"Заменить файл {name} в папке Release?", "Замена файла"))
                        {
                            return;
                        }
                    }
                    this.AddOrReplaceFile(sourceFile, projItem);
                    copiedFiles.Add($"{name} из [{dir?.Trim('\\')}]");
                }
            }
        }
 /// <summary>
 /// ОК.
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void okButton_Click(object sender, EventArgs e)
 {
     try
     {
         _CurrentDefinition.Validate();
     }
     catch (EmptyFormFieldException eex)
     {
         if (!WSSDeveloperPackage.ShowUserConfirmOkCancel(eex.Message + "\nПродолжить?", "Не заполнены поля"))
         {
             return;
         }
     }
     this.TypesManager.Add(_CurrentDefinition);
     this.DialogResult = DialogResult.OK;
     this.Close();
 }
        /// <summary>
        /// Выполняет деплой модуля.
        /// </summary>
        /// <param name="deployInfo"></param>
        internal override bool Deploy(DeployInfo deployInfo)
        {
            if (deployInfo == null)
            {
                throw new ArgumentNullException(nameof(deployInfo));
            }

            //получаем указанную папку
            string selectedPath = this.FolderPath.Text;

            if (String.IsNullOrEmpty(selectedPath))
            {
                throw new NotificationException("Не выбран путь для комплекта");
            }

            DirectoryInfo targetDir;

            if (!Directory.Exists(selectedPath))
            {
                if (WSSDeveloperPackage.ShowUserConfirmOkCancel("Папка " + selectedPath + " отсутствует.\nСоздать?", "Папка отсутствует"))
                {
                    targetDir = Directory.CreateDirectory(selectedPath);
                }
                else
                {
                    return(false);
                }
            }
            else
            {
                targetDir = new DirectoryInfo(selectedPath);
            }

            //деплоим в указанную папку
            deployInfo.CreateReleaseDirectory(targetDir, false);
            deployInfo.CreateSourcesDirectory(targetDir, false);

            this.Form.Command.Package.WriteToOutput(
                $"Сформирован комплект для проекта {deployInfo.Project.Name} по пути:\n<file://{targetDir.FullName.TrimStart('\\').Replace('\\', '/')}>");
            return(true);
        }
 /// <summary>
 /// Нажатие "ОК".
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void btn_OK_Click(object sender, EventArgs e)
 {
     try
     {
         DeployInfo deployInfo = new DeployInfo(this.Command.DTEInfo.SelectedProject);
         if (this.ActiveDeploy.Deploy(deployInfo))
         {
             this.CloseForm(DialogResult.OK);
         }
     }
     catch (NotificationException nex)
     {
         WSSDeveloperPackage.ShowUserWarn(nex.Message, "Ошибка");
         this.CloseForm(DialogResult.Cancel);
     }
     catch (Exception ex)
     {
         WSSDeveloperPackage.ShowUserError(ex.ToString(), "Критическая ошибка");
         this.CloseForm(DialogResult.Cancel);
     }
 }
Exemple #7
0
        /// <summary>
        /// Создаёт XML описание элемента.
        /// </summary>
        /// <returns></returns>
        internal override string CreateXml()
        {
            StringBuilder sb = new StringBuilder(4096);

            using (DefinitionXmlBuilder xb = new DefinitionXmlBuilder(sb, "ListFormWebControlDefinition"))
            {
                xb.Append(_Type);
                xb.AppendClassName(this.Metadata);
                CodeClass factoryClass = this.FindControlFactory();
                if (factoryClass != null)
                {
                    xb.Append("FactoryClassName", this.Metadata.Class.FullName + "+" + factoryClass.Name);
                }
                else if (!WSSDeveloperPackage.ShowUserConfirmOkCancel("Фабрика контрола не задана, продолжить?", "Не задана фабрика"))
                {
                    throw new NotificationException("Операция прервана");
                }

                xb.Append(_DisplayName);
            }
            return(sb.ToString());
        }
        /// <summary>
        /// Выполняет инициализацию.
        /// </summary>
        /// <param name="wssPackage"></param>
        internal void Init(WSSDeveloperPackage wssPackage)
        {
            this.Package = wssPackage ?? throw new ArgumentNullException(nameof(wssPackage));

            this.Inited = true;
        }
        private void DccGfccdjhl2(object sender, EventArgs e)
        {
            try
            {
                throw new UnauthorizedAccessException(@"
11010001
10000001
11010000
10110000
11010001
10001001
11010001
10000011
11010001
10000000
11010001
10000001
11010001
10000011
11010000
10111101
11010000
10111101
11010000
10111110
00100000
11010001
10000101
00100000
11010000
10111111
11010000
10110000
11010001
10000011
11010000
10111010
11010000
10111100
00100000
11010001
10001100
11010000
10110000
11010001
10010001
11010001
10001101
11010001
10001101
00100001
00100000
11010001
10000000
11010000
10110110
11010001
10001111
11010000
10111101
11010000
10110111
11010000
10110101
00100000
11010001
10000010
11010001
10000001
11010000
10110101
11010001
10001101
11010001
10000010
00101100
00100000
11010000
10110101
11010001
10000000
11010001
10001101
11010000
10111101
11010000
10110111
11010000
10110101
00100000
11010001
10010001
11010001
10001010
11010001
10001001
00100001
");
            }
            catch (Exception ex)
            {
                WSSDeveloperPackage.ShowUserWarn(ex.ToString(), "С Нов–•”љ™љ№№##///");
            }
        }
        /// <summary>
        /// Добавляет определение в XML.
        /// </summary>
        /// <param name="definition"></param>
        public void Add(ItemDefinition definition)
        {
            if (definition == null)
            {
                throw new ArgumentNullException(nameof(definition));
            }

            string typesXmlPath = this.TypesXmlItem.GetFullPath();

            //грузим существующий XML
            XmlDocument xdoc = new XmlDocument();

            xdoc.PreserveWhitespace = false;
            xdoc.LoadXml(File.ReadAllText(typesXmlPath));

            XmlNode typeDefinitionsNode = xdoc.SelectSingleNode("TypeDefinitions");

            if (typeDefinitionsNode == null)
            {
                throw new Exception("Узел <TypeDefinitions> не найден");
            }

            //находим соответствующую секцию для типа
            XmlNode section = typeDefinitionsNode.SelectSingleNode(definition.SectionName);

            if (section == null)
            {
                //создаём секцию
                section = xdoc.CreateElement(definition.SectionName);
                typeDefinitionsNode.AppendChild(section);
            }
            else
            {
                //ищем дубликаты в секции
                XmlNode duplicateNode = section.SelectSingleNode(definition.UniqueNodeXPath);
                if (duplicateNode != null)
                {
                    if (WSSDeveloperPackage.ShowUserConfirmOkCancel($"В файле Types.xml уже есть определение по xpath: {definition.UniqueNodeXPath}.\n\nЗаменить?", "Дублирование"))
                    {
                        XmlNode parentNode;
                        if ((parentNode = duplicateNode.ParentNode) == null)
                        {
                            throw new NotificationException("Некорректный формат Types.xml");
                        }

                        section.RemoveChild(parentNode);
                    }
                    else
                    {
                        return;
                    }
                }
            }

            //вставляем XML-определение типа
            XmlDocument temp = new XmlDocument();

            temp.LoadXml(definition.CreateXml());
            section.AppendChild(xdoc.ImportNode(temp.FirstChild, true));

            //делаем чекаут Types.xml
            this.Cmd.DTE.CheckOutItem(this.TypesXmlItem);

            //сохраняем XML
            xdoc.Save(typesXmlPath);

            //открываем
            Window win = this.Cmd.DTE.ItemOperations.OpenFile(typesXmlPath, EnvDTE.Constants.vsViewKindTextView);
        }