示例#1
0
        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);
        }
示例#2
0
        /// <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();
            }
        }