我们目前正在将一堆旧的NuGet软件包升级到最新版本。 CsvHelper在我们使用的先前版本(2.x)和最新版本(12.x)之间移动了一堆东西。更改日志没有提及很多此类更改(或者至少没有明确指出每个更改日志条目中更改了哪些属性或方法),这使我们的升级过程受挫。
IWriterConfiguration.UseExcelLeadingZerosFormatForNumerics
设置在升级中消失了,我很难找出较新版本中的等效设置。我试图跟踪GitHub repository中的提交历史记录中的更改,但是主要的版本号更改之一涉及到许多类的重命名,这意味着我很难在此更改的位置找到提交发生,所以我看不到较新版本中的等效设置。
我们需要确保升级之前系统的行为与新行为相同。有谁知道我将如何在当前软件包版本中复制此配置设置引起的行为?
答案 0 :(得分:0)
Jeroen Mostert指出,此配置选项的行为的原始实现是在虚拟CsvWriter.WriteField
方法中。因此,可以根据需要重新实现原始行为。
由于方法的结构,似乎没有一种方法可以重新实现此功能,而如果程序包维护者进行了更改,则该方法不会破坏或引起难以发现的问题CsvWriter.WriteField
在未来的行为或实现。但是,此派生类至少应适用于CsvHelper(12.1.2)的当前版本:
public class ExcelFormatCsvWriter : CsvWriter
{
public bool UseExcelFormat
{
get; set;
}
public ExcelFormatCsvWriter(TextWriter writer) : base(writer)
{
}
public override void WriteField(string field, bool shouldQuote)
{
if (shouldQuote && !string.IsNullOrEmpty(field))
{
field = field.Replace(Context.WriterConfiguration.QuoteString, Context.WriterConfiguration.DoubleQuoteString);
}
if (UseExcelFormat && !string.IsNullOrEmpty(field) && field[0] == '0' && field.All(Char.IsDigit))
{
field = "=" + Context.WriterConfiguration.QuoteString + field + Context.WriterConfiguration.QuoteString;
}
else if (shouldQuote)
{
field = Context.WriterConfiguration.Quote + field + Context.WriterConfiguration.Quote;
}
Context.Record.Add(field);
}
}