/// <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); } }
/// <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); } }
/// <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); }