簡體   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