public void Execute(object arg = null) { var dte = Host.Instance.Dte2; var project = dte.GetActiveProejct(); Common.CheckTfs(project); var file = Path.Combine(project.GetDirectory(), NuGet.NuGetDomain.NuSpecFileName); if (File.Exists(file)) { return; } using (var sw = new StreamWriter(file, false, Encoding.UTF8)) { var temp = Resource.NuSpecTemplate; var configFile = Path.Combine(Path.GetDirectoryName(project.FileName), "packages.config"); if (File.Exists(configFile)) { try { var reader = new PackagesConfigReader(configFile); var ds = reader.GetDependencySet(); if (ds.Any()) { var package = new NuGet.Package(); package.Metadata.Dependencies = ds; var packageXml = XmlSerializerHelper.GetXmlStringFromObject(package); var start = packageXml.IndexOf("<dependencies>"); var end = packageXml.IndexOf("</dependencies>") + "</dependencies>".Length; packageXml = packageXml.Substring(start, end - start); temp = Regex.Replace(temp, "<dependencies>.*?</dependencies>", $"{packageXml}", RegexOptions.Singleline | RegexOptions.Compiled); } } catch (Exception ex) { } } sw.Write(temp); sw.Flush(); sw.Close(); } project.ProjectItems.AddFromFile(file); dte.ItemOperations.OpenFile(file); }
/// <summary> /// This function is the callback used to execute the command when the menu item is clicked. /// See the constructor to see how the menu item is associated with this function using /// OleMenuCommandService service and MenuCommand class. /// </summary> /// <param name="sender">Event sender.</param> /// <param name="e">Event args.</param> private void MenuItemCallback(object sender, EventArgs e) { var dte = Host.Instance.Dte2; _project = dte.GetActiveProejct(); Common.CheckTfs(_project); _dir = _project.GetDirectory(); _nuspecFile = Path.Combine(_dir, NuGetDomain.NuSpecFileName); if (!File.Exists(_nuspecFile)) { var dr = VsShellUtilities.ShowMessageBox(this.ServiceProvider, $"Miss {NuGetDomain.NuSpecFileName} file,would you add it now?", "Warning", OLEMSGICON.OLEMSGICON_WARNING, OLEMSGBUTTON.OLEMSGBUTTON_YESNO, OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST); if (dr != 6) { return; } new AddNuSpecCommand().Execute(); } _assemblyInfo = _project.GetProjectAssemblyInfo(); _xmlDoc = new XmlDocument(); _xmlDoc.Load(_nuspecFile); var xml = _xmlDoc.InnerXml; _nupack = XmlSerializerHelper.LoadObjectFromXmlString <NuGet.Package>(xml); var packageFields = new List <string>(); var assemblyFields = new List <string>(); if (_nupack.Metadata.Id.IsEmptyOrPlaceHolder() && string.IsNullOrWhiteSpace(_assemblyInfo.Title)) { packageFields.Add("id"); assemblyFields.Add("AssemblyTitle"); } if (_nupack.Metadata.Authors.IsEmptyOrPlaceHolder() && string.IsNullOrWhiteSpace(_assemblyInfo.Company)) { packageFields.Add("authors"); assemblyFields.Add("AssemblyCompany"); } if (_nupack.Metadata.Description.IsEmptyOrPlaceHolder() && string.IsNullOrWhiteSpace(_assemblyInfo.Description)) { packageFields.Add("description"); assemblyFields.Add("AssemblyDescription"); } if (assemblyFields.Count > 0) { var assemblyInfoFile = _project.GetAssemblyInfoFileName(); if (File.Exists(assemblyInfoFile)) { VsShellUtilities.ShowMessageBox(this.ServiceProvider, $"{string.Join("/", assemblyFields)} required,please edit {Path.GetFileName(assemblyInfoFile)} at first.", "Warning", OLEMSGICON.OLEMSGICON_WARNING, OLEMSGBUTTON.OLEMSGBUTTON_OK, OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST); dte.ItemOperations.OpenFile(assemblyInfoFile); } else { VsShellUtilities.ShowMessageBox(this.ServiceProvider, $"{string.Join("/", packageFields)} required,please edit package.nuspec at first.", "Warning", OLEMSGICON.OLEMSGICON_WARNING, OLEMSGBUTTON.OLEMSGBUTTON_OK, OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST); dte.ItemOperations.OpenFile(_nuspecFile); } return; } MergePackagesConfig(); var form = new DeployWizard(_assemblyInfo, _nupack, _xmlDoc); if (form.ShowDialog() == DialogResult.OK) { form.SaveAndBuild(); } }