繁体   English   中英

即使已经存在相同版本,也要创建新的Nuget软件包

[英]Create new Nuget package even if same version already exist

我当时在从事C#库项目,因此想从中创建一个Nuget包。 我正在为此使用该命令

dotnet pack /p:Version=2.0.1 --include-symbols

正确处理版本后,它可以正常工作。

但是在某些情况下,我必须创建一个与以前版本相同的nuget软件包,以替换上一个错误的2.0.1版本。

现在,当我尝试上述命令时,如果已经存在具有相同版本的软件包,它什么也不做?

有没有一种方法可以替换现有软件包而无需手动删除它?

我尝试了很多事情,最终做如下事情。

编写了一个控制台应用程序,该应用程序将更新库项目的.csproj版本,然后在powershell脚本的帮助下构建库项目。

class Program
    {
        private static string csProjectPath => ConfigurationManager.AppSettings["projectPath"] + ConfigurationManager.AppSettings["projectName"];
        private static string projectPath => ConfigurationManager.AppSettings["projectPath"];
        static void Main(string[] args)
        {
            try
            {
                var allowedTypes = new List<string> { "1", "2", "3", "4" };
                Console.WriteLine($"Build Type: {Environment.NewLine} 1. Major {Environment.NewLine} 2. Minor {Environment.NewLine} 3. Build Number {Environment.NewLine} 4. Revision ");
                var buildType = Console.ReadLine();
                while (!allowedTypes.Contains(buildType))
                {
                    Console.WriteLine("Please enter a valid entry");
                    Console.WriteLine($"Build Type: {Environment.NewLine} 1. Major {Environment.NewLine} 2. Minor {Environment.NewLine} 3. Build Number {Environment.NewLine} 4. Revision ");
                    buildType = Console.ReadLine();
                }

                RunPowershellScript(buildType);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            Console.WriteLine("Press any key to exit...");
            Console.ReadKey();
        }



        public static string GetCSProjectUpdateCommand(string buildType)
        {
            return @"
                $csprojPath = $args[0]
                $buildType = $args[1]

                $filePath = $csprojPath
                $xml = New-Object XML
                $xml.Load($filePath)
                $versionNode = $xml.Project.PropertyGroup.Version

                $currentSplit = $versionNode.Split('.')
                $currentRevisionNumber = 0

                $myBuildNumber = ''

                $splitNumber = $versionNode.Split('.')
                $majorNumber = $splitNumber[0]
                $minorNumber = $splitNumber[1]
                $buildNumber = $splitNumber[2]
                $revisNumber = $splitNumber[3]
                Switch($buildType)
                {
                    '1' { $myBuildNumber = ([int]$majorNumber + 1) + '.0.0.0'; break  }
                    '2' { $myBuildNumber = $majorNumber + '.' + ([int]$minorNumber + 1) + '.0.0'; break }
                    '3' { $myBuildNumber = $majorNumber + '.' + $minorNumber + '.' + ([int]$buildNumber + 1) +'.0'; break }
                    '4' { $myBuildNumber = $majorNumber + '.' + $minorNumber + '.' + $buildNumber + '.' + ([int]$updatedRevisionNumber + 1); break}
                    default { Write - Host 'Invalid data' }
                }

                if ($versionNode -eq $null) {
                    $versionNode = $xml.CreateElement('Version')
                        $xml.Project.PropertyGroup.AppendChild($versionNode)
                }
                $xml.Project.PropertyGroup.Version = $myBuildNumber
                $xml.Save($filePath)";
        }

        private static void RunPowershellScript(string buildType)
        {
            UpdateCSProject(buildType);
            BuildProject();
        }

        private static void UpdateCSProject(string buildType)
        {
            using (PowerShell PowerShellInstance = PowerShell.Create())
            {
                PowerShellInstance.AddScript(GetCSProjectUpdateCommand(buildType));

                PowerShellInstance.AddArgument(csProjectPath);
                PowerShellInstance.AddArgument(buildType);

                IAsyncResult result = PowerShellInstance.BeginInvoke();
                while (result.IsCompleted == false)
                {
                    Console.WriteLine("Updating csproj...");
                    Thread.Sleep(1000);
                }
                Console.WriteLine("Update completed!");
            }
        }

        private static void BuildProject()
        {
            using (PowerShell PowerShellInstance = PowerShell.Create())
            {
                PowerShellInstance.AddScript($"dotnet pack {projectPath} --include-symbols");
                PowerShellInstance.AddArgument(projectPath);
                IAsyncResult result = PowerShellInstance.BeginInvoke();
                while (result.IsCompleted == false)
                {
                    Console.WriteLine("Please wait, we are building the project...");
                    Thread.Sleep(1000);
                }
                Console.WriteLine("Build completed!. Nuget package created.");
            }
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM