.net - 即使已经存在相同的版本,也要创建新的 Nuget 包
问题描述
我正在研究一个 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.");
}
}
}
}
推荐阅读
- r - 试图找到数据框中字段的每日差异
- visual-studio - 尝试编译程序集时如何调试“未解决的外部”错误?
- tensorflow - 使用 tensorflow 训练神经网络,为什么总是预测一个类?
- ios - AVCaptureAudioDataOutputSampleBufferDelegate 未调用 captureOutput
- react-native - 在 React Native 中使用 async/await 处理 API 调用
- c++ - WM_DEVICECHANGE lParam 为空
- c# - 未找到导入的项目 C:\...\v4.5\Microsoft.Expression.Blend.WPF.targets"
- unity3d - 统一 3d 错误 CS0118
- d3.js - 如何从 d3 日历视图中的数据动态设置日期?
- php - 如何根据由 PHP 中另一个表中的数据组成的下拉菜单将数字输入数据库?