示例#1
0
        static void Main()
        {
            //PathHelper.BaseDirectory = @"E:\X\Src\NewLife.Cube";
            XTrace.Debug = true;
            XTrace.UseConsole();
            //"cmd".Run("/c del *.nuspec /f/q");
            foreach (var item in ".".AsDirectory().GetAllFiles("*.nuspec"))
            {
                Console.WriteLine("删除 {0}", item);
                item.Delete();
            }
            // 找到名称
            var proj = ".".AsDirectory().FullName.EnsureEnd("\\");

            Console.WriteLine("proj项目:{0}", proj);
            string[] pathsplit = proj.Split("\\");

            var name = pathsplit[pathsplit.Count() - 1];

            Console.WriteLine("项目:{0}", name);
            proj = name + ".csproj";
            var spec = name + ".nuspec";

            if (!File.Exists(spec.GetFullPath()))
            {
                var tar = "..\\..\\Bin\\" + name + ".dll";
                tar = tar.GetFullPath();
                if (!File.Exists(tar))
                {
                    tar = "..\\..\\Bin4\\" + name + ".exe";
                    tar = tar.GetFullPath();
                }
                if (!File.Exists(tar))
                {
                    tar = "..\\..\\XCoder\\" + name + ".exe";
                    tar = tar.GetFullPath();
                }
                if (!File.Exists(tar))
                {
                    Console.WriteLine("只能找项目文件了,总得做点啥不是");
                    //编译当前工程
                    "msbuild".Run(proj + " /t:Rebuild /p:Configuration=Release /p:VisualStudioVersion=12.0 /noconlog /nologo", 8000);
                    //"NuGet".Run("spec -f -a " + name, 5000);
                    return;
                }
                Console.WriteLine("目标 {0}", tar);
                "NuGet".Run("spec -Force -a " + tar, 5000);

                var spec2 = ".".AsDirectory().GetAllFiles(spec).First().Name;
                if (!spec.EqualIgnoreCase(spec2))
                {
                    File.Move(spec2, spec);
                }
            }

            // 部分项目加上前缀
            var name2 = name.EnsureStart("NewLife.");

            var cfg = Manifest.Load(spec.GetFullPath());

            // 修改配置文件
            cfg.Metadata.Id           = name2;
            cfg.Metadata.LicenseUrl   = "http://www.NewLifeX.com";
            cfg.Metadata.ProjectUrl   = "http://www.NewLifeX.com/showtopic-51.aspx";
            cfg.Metadata.IconUrl      = "http://www.NewLifeX.com/favicon.ico";
            cfg.Metadata.Copyright    = "Copyright 2002-{0} 新生命开发团队 http://www.NewLifeX.com".F(DateTime.Now.Year);
            cfg.Metadata.Tags         = "新生命团队 X组件 NewLife " + name;
            cfg.Metadata.ReleaseNotes = "http://www.newlifex.com/showtopic-51.aspx";
            //cfg.Metadata.Authors="新生命开发团队";
            //cfg.Metadata.Owners="新生命开发团队";
            // 清空依赖
            if (cfg.Metadata.DependencySets != null && cfg.Metadata.DependencySets.Dependencies != null)
            {
                cfg.Metadata.DependencySets.Dependencies.Clear();
            }

            // 自动添加所有文件
            if (cfg.Files == null)
            {
                cfg.Files = new List <ManifestFile>();
            }
            cfg.Files.Clear();
            if (cfg.Files.Count == 0)
            {
                AddFile(cfg, name, "dll");
                AddFile(cfg, name, "xml");
                AddFile(cfg, name, "pdb");
                AddFile(cfg, name, "exe");

                AddFile(cfg, name, "dll", false);
                AddFile(cfg, name, "xml", false);
                AddFile(cfg, name, "pdb", false);
                AddFile(cfg, name, "exe", false);
            }

            cfg.Save();

            //var pack = "pack {0} -IncludeReferencedProjects -Build -Prop Configuration={1} -Exclude **\\*.txt;**\\*.png;content\\*.xml";
            // *\\*.*干掉下级的所有文件
            var pack = "pack {0} -IncludeReferencedProjects -Exclude **\\*.txt;**\\*.png;*.jpg;*.xml;*\\*.*";

            Console.WriteLine("打包:{0}", proj);
            //"cmd".Run("/c del *.nupkg /f/q");
            foreach (var item in ".".AsDirectory().GetAllFiles("*.nupkg"))
            {
                Console.WriteLine("删除 {0}", item);
                item.Delete();
            }
            "NuGet".Run(pack.F(proj), 30000);
            var fi = ".".AsDirectory().GetAllFiles("*.nupkg").FirstOrDefault();

            if (fi != null)
            {
                var nupkg = fi.Name;
                Console.WriteLine("发布:{0}", nupkg);
                "NuGet".Run("push {0} -Source https://www.nuget.org".F(nupkg), 30000);
            }
        }
示例#2
0
        static void Main()
        {
            //PathHelper.BaseDirectory = @"E:\X\Src\NewLife.Cube";
            XTrace.Debug = true;
            XTrace.UseConsole();

            // 查找NuGet.exe
            var ng = "..\\..\\Src\\DLL\\NuGet.exe".GetFullPath();

            //"cmd".Run("/c del *.nuspec /f/q");
            foreach (var item in ".".AsDirectory().GetAllFiles("*.nuspec"))
            {
                Console.WriteLine("删除 {0}", item);
                item.Delete();
            }
            // 找到名称
            var proj = ".".AsDirectory().FullName.EnsureEnd("\\");

            Console.WriteLine("proj项目:{0}", proj);

            var name = "NewLife.Cube";

            Console.WriteLine("项目:{0}", name);
            proj = ".".AsDirectory().GetAllFiles("*.csproj").FirstOrDefault().FullName;
            var spec     = name + ".nuspec";
            var specFile = spec.GetFullPath();

            if (!File.Exists(specFile))
            {
                var tar = "..\\..\\Bin\\" + name + ".dll";
                tar = tar.GetFullPath();
                if (!File.Exists(tar))
                {
                    tar = "..\\..\\Bin4\\" + name + ".exe";
                    tar = tar.GetFullPath();
                }
                if (!File.Exists(tar))
                {
                    tar = "..\\..\\XCoder\\" + name + ".exe";
                    tar = tar.GetFullPath();
                }
                if (!File.Exists(tar))
                {
                    Console.WriteLine("只能找项目文件了,总得做点啥不是");
                    //编译当前工程
                    "msbuild".Run(proj + " /t:Rebuild /p:Configuration=Release /p:VisualStudioVersion=15.0 /noconlog /nologo", 8000);
                    //"NuGet".Run("spec -f -a " + name, 5000);
                    return;
                }
                Console.WriteLine("目标 {0}", tar);
                ng.Run("spec -Force -a " + tar, 5000);

                /*var sCmd = new NuGet.CommandLine.SpecCommand();
                 * sCmd.Force = true;
                 * sCmd.AssemblyPath = tar;
                 * sCmd.ExecuteCommand();*/

                var spec2 = ".".AsDirectory().GetAllFiles(spec).First().Name;
                if (!spec.EqualIgnoreCase(spec2))
                {
                    File.Move(spec2, spec);
                }
            }

            // 部分项目加上前缀
            var name2 = name.EnsureStart("NewLife.");

            var ms  = new MemoryStream(File.ReadAllBytes(specFile));
            var cfg = Manifest.ReadFrom(ms, false);

            // 修改配置文件
            cfg.Metadata.Id           = name2;
            cfg.Metadata.LicenseUrl   = "http://www.NewLifeX.com";
            cfg.Metadata.ProjectUrl   = "https://github.com/NewLifeX";
            cfg.Metadata.IconUrl      = "http://www.NewLifeX.com/favicon.ico";
            cfg.Metadata.Copyright    = "Copyright 2002-{0} 新生命开发团队 http://www.NewLifeX.com".F(DateTime.Now.Year);
            cfg.Metadata.Tags         = "新生命团队 X组件 NewLife " + name;
            cfg.Metadata.ReleaseNotes = "https://github.com/NewLifeX";
            //cfg.Metadata.Authors="新生命开发团队";
            //cfg.Metadata.Owners="新生命开发团队";

            /*var rep = new RepositoryMetadata();
             * rep.Type = "git";
             * rep.Url = "https://github.com/NewLifeX/X.git";
             * cfg.Metadata.Repository = rep;*/

            // 清空依赖
            var dgs = cfg.Metadata?.DependencySets;

            dgs?.Clear();
            //var dgs = cfg.Metadata.DependencyGroups;
            //dps.RemoveAll(e => e.Id == "SampleDependency");

            //var fx = new NuGet.Frameworks.NuGet.Frameworks1094018.NuGetFramework(".NETFramework4.5");
            //var dg = new PackageDependencyGroup(fx, new PackageDependency[0]);
            //dgs.Add(dk);

            // 自动添加所有文件
            if (cfg.Files == null)
            {
                cfg.Files = new List <ManifestFile>();
            }
            cfg.Files.Clear();
            if (cfg.Files.Count == 0)
            {
                AddFile(cfg, name, "dll;xml;pdb;exe", @"..\..\Bin", @"lib\net45");
                AddFile(cfg, name, "dll;xml;pdb;exe", @"..\..\Bin2", @"lib\net20");
                AddFile(cfg, name, "dll;xml;pdb;exe", @"..\..\Bin4", @"lib\net40");
                AddFile(cfg, name, "dll;xml;pdb;exe", @"..\..\Bin\netstandard2.0", @"lib\netstandard2.0");

                if (name == "XCode")
                {
                    AddFile(cfg, null, "*.ps1", @"tools", @"tools");
                }
            }

            ms = new MemoryStream();
            cfg.Save(ms);
            File.WriteAllBytes(specFile, ms.ToArray());

            //var pack = "pack {0} -IncludeReferencedProjects -Build -Prop Configuration={1} -Exclude **\\*.txt;**\\*.png;content\\*.xml";
            // *\\*.*干掉下级的所有文件
            var pack = "pack {0} -IncludeReferencedProjects -Exclude **\\*.txt;**\\*.png;*.jpg";

            Console.WriteLine("打包:{0}", proj);
            //"cmd".Run("/c del *.nupkg /f/q");
            foreach (var item in ".".AsDirectory().GetAllFiles("*.nupkg"))
            {
                Console.WriteLine("删除 {0}", item);
                item.Delete();
            }
            ng.Run(pack.F(proj), 30000);
            var fi = ".".AsDirectory().GetAllFiles("*.nupkg").FirstOrDefault();

            if (fi != null)
            {
                var nupkg = fi.Name;
                Console.WriteLine("发布:{0}", nupkg);
                ng.Run("push {0} {1} -Source https://www.nuget.org -Verbosity detailed".F(nupkg, File.ReadAllText("..\\..\\nuget.key")), 30000);
            }
        }