This commit is contained in:
Alexander 2022-11-30 13:36:29 +03:00
parent 5872049cc7
commit f0acfce2f3
24 changed files with 570 additions and 60 deletions

View File

@ -0,0 +1,63 @@
using anbs_cp.Interfaces;
namespace anbs_cp.Classes;
/// <summary>
/// Класс ошибки
/// </summary>
public sealed class ActionError: IActionError
{
/// <summary>
/// Критичность ошибки:
/// при некритичных ошибках продолжение выполнения операции возможно,
/// а при критичных -- нет
/// </summary>
public bool IsCritical { get; init; }
/// <summary>
/// Объект ошибки
/// </summary>
public object Object { get; set; }
/// <summary>
/// Сообщение об ошибке
/// </summary>
public string Message { get; set; }
#region Конструкторы
/// <summary>
/// Конструктор по умолчанию
/// </summary>
public ActionError ()
{
IsCritical = true;
Object = "Not Implemented";
Message = "Not Implemented";
}
/// <summary>
/// Конструктор с 2 параметрами
/// </summary>
/// <param name="message">Сообщение</param>
/// <param name="isCritical">Критичность ошибки</param>
public ActionError (string message, bool isCritical = true)
{
IsCritical = isCritical;
Object = "";
Message = message;
}
/// <summary>
/// Конструктор с 3 параметрами
/// </summary>
/// <param name="eObject">Объект ошибки</param>
/// <param name="message">Сообщение</param>
/// <param name="isCritical">Критичность ошибки</param>
public ActionError (object eObject, string message, bool isCritical = true)
{
IsCritical = isCritical;
Object = eObject;
Message = message;
}
#endregion
}

View File

@ -0,0 +1,49 @@
using anbs_cp.Interfaces;
namespace anbs_cp.Classes;
/// <summary>
/// Класс предупреждения
/// </summary>
public sealed class ActionInfo: IActionInfo
{
#region Конструкторы
/// <summary>
/// Конструктор по умолчанию
/// </summary>
public ActionInfo ()
{
IsStatusInfo = false;
Object = string.Empty;
Message = string.Empty;
}
/// <summary>
/// Конструктор
/// </summary>
/// <param name="eObject">Объект</param>
/// <param name="message">Сообщение</param>
/// <param name="isStatus">Является статусной информацией?</param>
public ActionInfo (string eObject, string message, bool isStatus = false)
{
IsStatusInfo = isStatus;
Object = eObject;
Message = message;
}
#endregion
#region Реализация интерфейса
/// <summary>
/// Объект
/// </summary>
public object Object { get; set; }
/// <summary>
/// Сообщение
/// </summary>
public string Message { get; set; }
/// <summary>
/// Статусная информация (например, начало работы)
/// </summary>
public bool IsStatusInfo { get; init; }
#endregion
}

View File

@ -0,0 +1,299 @@
using anbs_cp.Interfaces;
namespace anbs_cp.Classes;
/// <summary>
/// Состояние действия
/// </summary>
public sealed class ActionState
{
/// <summary>
/// Конструктор
/// </summary>
public ActionState ()
{
Info = new();
Warnings = new();
Errors = new();
}
/// <summary>
/// Список информации
/// </summary>
public List<IActionInfo> Info { get; }
/// <summary>
/// Список предупреждений
/// </summary>
public List<IActionWarning> Warnings { get; }
/// <summary>
/// Список ошибок
/// </summary>
public List<IActionError> Errors { get; }
#region Методы
#region Очистка
/// <summary>
/// Очищает список ошибок
/// </summary>
public void ClearErrors ()
{
Errors.Clear();
Errors.TrimExcess();
}
/// <summary>
/// Очищает список предупреждений
/// </summary>
public void ClearWarnings ()
{
Warnings.Clear();
Warnings.TrimExcess();
}
/// <summary>
/// Очищает список информации
/// </summary>
public void ClearInfo ()
{
Info.Clear();
Info.TrimExcess();
}
/// <summary>
/// Очищает все списки
/// </summary>
public void Clear ()
{
ClearInfo();
ClearWarnings();
ClearErrors();
}
#endregion
#region Добавление ошибки
/// <summary>
/// Добавление ошибки
/// </summary>
/// <param name="error">Ошибка</param>
// ReSharper disable once MemberCanBeMadeStatic.Global
// ReSharper disable once FunctionRecursiveOnAllPaths
public void AddError (IActionError error) => AddError(error);
/// <summary>
/// Добавляет ошибки в список
/// </summary>
/// <param name="errors">Список ошибок</param>
public void AddErrors(IEnumerable<IActionError> errors) => Errors.AddRange(errors);
/// <summary>
/// Добавление ошибки
/// </summary>
/// <param name="critical">Является ли ошибка критической</param>
public void AddError (bool critical = true)
{
//Создаю ошибку
ActionError error = new("", critical);
//Добавляю ошибку
AddError(error);
}
/// <summary>
/// Добавление ошибки
/// </summary>
/// <param name="message">Сообщение об ошибке</param>
/// <param name="critical">Является ли ошибка критической</param>
public void AddError (string message, bool critical = true)
{
//Создаю ошибку
ActionError error = new(message, critical);
//Добавляю ошибку
AddError(error);
}
/// <summary>
/// Добавление ошибки
/// </summary>
/// <param name="errorObject">Объект ошибки</param>
/// <param name="message">Сообщение об ошибке</param>
/// /// <param name="critical">Является ли ошибка критической</param>
public void AddError (string errorObject, string message, bool critical = true)
{
//Создаю ошибку
ActionError error = new(errorObject, message, critical);
//Добавляю ошибку
AddError(error);
}
#endregion
#region Добавление предупреждения
/// <summary>
/// Добавление предупреждения
/// </summary>
/// <param name="warning">Предупреждение</param>
public void AddWarning (IActionWarning warning) => Warnings.Add(warning);
/// <summary>
/// Добавление предупреждений
/// </summary>
/// <param name="warnings">Список предупреждений</param>
public void AddWarnings(IEnumerable<IActionWarning> warnings) => Warnings.AddRange(warnings);
/// <summary>
/// Добавление предупреждение
/// </summary>
/// <param name="message">Текст предупреждения</param>
/// <param name="warningObject">Объект предупреждения</param>
public void AddWarning (string message, string warningObject = "")
{
//Создаю предупреждение
ActionWarning warning = new(warningObject, message);
//Добавляю предупреждение
AddWarning(warning);
}
#endregion
#region Добавление информации
/// <summary>
/// Добавление информации
/// </summary>
/// <param name="info">Информация</param>
public void AddInfo (IActionInfo info) => Info.Add(info);
/// <summary>
/// Добавление информации
/// </summary>
/// <param name="infos">Список информации</param>
public void AddInfos (IEnumerable<IActionInfo> infos) => Info.AddRange(infos);
/// <summary>
/// Добавление информации
/// </summary>
/// <param name="message">Текст информации</param>
/// <param name="warningObject">Объект информации</param>
public void AddInfo (string message, string warningObject = "")
{
//Создаю информацию
ActionInfo info = new(warningObject, message);
//Добавляю информацию
AddInfo(info);
}
#endregion
#region Печать
/// <summary>
/// Печать списка ошибок
/// </summary>
/// <param name="formatList">Формат списка</param>
/// <param name="formatItem">Формат элемента списка</param>
/// <returns>Список ошибок в текстовой форме</returns>
public string PrintErrorList (string formatList, string formatItem)
{
string elements =
#pragma warning disable CS8625
Errors.Aggregate<IActionError, string>(null, (current, error) => current + error.PrintMessage(formatItem));
#pragma warning restore CS8625
return string.Format(formatList, elements);
}
/// <summary>
/// Печать списка предупреждений
/// </summary>
/// <param name="formatList">Формат списка</param>
/// <param name="formatItem">Формат элемента списка</param>
/// <returns>Список предупреждений в текстовой форме</returns>
public string PrintWarningList (string formatList, string formatItem)
{
string elements =
#pragma warning disable CS8625
Warnings.Aggregate<IActionWarning, string>(null,
#pragma warning restore CS8625
(current, warning) => current + warning.PrintMessage(formatItem));
return string.Format(formatList, elements);
}
/// <summary>
/// Печать списка информации
/// </summary>
/// <param name="formatList">Формат списка</param>
/// <param name="formatItem">Формат элемента списка</param>
/// <returns>Список информации в текстовой форме</returns>
public string PrintInfoList (string formatList, string formatItem)
{
string elements =
#pragma warning disable CS8625
Info.Aggregate<IActionInfo, string>(null, (current, info) => current + info.PrintMessage(formatItem));
#pragma warning restore CS8625
return string.Format(formatList, elements);
}
#endregion
#region Проверка на наличие
/// <summary>
/// Проверяет, есть ли ошибки
/// </summary>
/// <param name="ignoreNonCritical">Игнорировать не критические</param>
/// <returns>Наличие ошибок</returns>
public bool HasErrors (bool ignoreNonCritical = false) =>
ignoreNonCritical ? Errors.Any(static error => error.IsCritical) : Errors.Any();
/// <summary>
/// Проверяет, есть ли предупреждения
/// </summary>
/// <param name="ignoreInformWarning">Игнорировать информационные предупреждения</param>
/// <returns>Наличие предупреждений</returns>
public bool HasWarnings (bool ignoreInformWarning = false) => ignoreInformWarning
? Warnings.Any(static warning => !warning.IsInformWarning)
: Warnings.Any();
/// <summary>
/// Проверяет, есть ли сообщения
/// </summary>
/// <param name="ignoreStatus">Игнорировать статусные сообщения</param>
/// <returns>Наличие сообщений</returns>
public bool HasInfo (bool ignoreStatus) => ignoreStatus ? Info.Any(static info => !info.IsStatusInfo) : Info.Any();
/// <summary>
/// Успешно ли завершилось
/// </summary>
public bool IsSuccess (bool ignoreNonCriticalErrors = false) =>
!HasErrors(ignoreNonCriticalErrors) && !HasWarnings(true);
#endregion
#region Количество сообщений
/// <summary>
/// Количество ошибок
/// </summary>
/// <param name="ignoreNonCritical">Игнорировать не критические</param>
/// <returns>Количество ошибок</returns>
public int ErrorsCount (bool ignoreNonCritical = false) =>
ignoreNonCritical ? Errors.Count(static error => error.IsCritical) : Errors.Count;
/// <summary>
/// Количество предупреждений
/// </summary>
/// <param name="ignoreInformWarning">Игнорировать информационные предупреждения</param>
/// <returns>Количество предупреждений</returns>
public int WarningsCount (bool ignoreInformWarning = false) => ignoreInformWarning
? Warnings.Count(static warning => !warning.IsInformWarning)
: Warnings.Count;
/// <summary>
/// Количество информационных сообщений
/// </summary>
/// <param name="ignoreStatus">Игнорировать статусные сообщения</param>
/// <returns>Количество информационных сообщений</returns>
public int InfoCount (bool ignoreStatus) => ignoreStatus ? Info.Count(static info => !info.IsStatusInfo) : Info.Count;
#endregion
#endregion
}

View File

@ -0,0 +1,49 @@
using anbs_cp.Interfaces;
namespace anbs_cp.Classes;
/// <summary>
/// Класс предупреждения
/// </summary>
public sealed class ActionWarning: IActionWarning
{
#region Конструкторы
/// <summary>
/// Конструктор по умолчанию
/// </summary>
public ActionWarning ()
{
IsInformWarning = false;
Object = string.Empty;
Message = string.Empty;
}
/// <summary>
/// Конструктор
/// </summary>
/// <param name="eObject">Объект</param>
/// <param name="message">Сообщение</param>
/// <param name="isInform">Является ли информирующим предупреждением</param>
public ActionWarning (string eObject, string message, bool isInform = false)
{
IsInformWarning = isInform;
Object = eObject;
Message = message;
}
#endregion
#region Реализация интерфейса
/// <summary>
/// Объект
/// </summary>
public object Object { get; set; }
/// <summary>
/// Сообщение
/// </summary>
public string Message { get; set; }
/// <summary>
/// Информирующее предупреждение возникает для предупреждения ВОЗМОЖНОЙ ошибки в дальнейшей эксплуатации и не влияет на текущую операцию.
/// </summary>
public bool IsInformWarning { get; init; }
#endregion
}

View File

@ -1,4 +1,4 @@
namespace anbs_cp; namespace anbs_cp.Classes;
/// <summary> /// <summary>
/// Форматирует число элементов в понятную строку /// Форматирует число элементов в понятную строку

View File

@ -1,4 +1,4 @@
namespace anbs_cp; namespace anbs_cp.Classes;
/// <summary> /// <summary>
/// Форматирует размер файла/папки в понятную строку /// Форматирует размер файла/папки в понятную строку

View File

@ -1,4 +1,4 @@
namespace anbs_cp; namespace anbs_cp.Classes;
/// <summary> /// <summary>
/// Форматирует размерности в понятную строку /// Форматирует размерности в понятную строку

View File

@ -1,4 +1,4 @@
namespace anbs_cp; namespace anbs_cp.Classes;
/// <summary> /// <summary>
/// Класс, добавляющий реализацию некоторых методов Delphi, которые упрощают работу в C#. /// Класс, добавляющий реализацию некоторых методов Delphi, которые упрощают работу в C#.

View File

@ -1,6 +1,6 @@
using System.Reflection; using System.Reflection;
namespace anbs_cp; namespace anbs_cp.Classes;
/// <summary> /// <summary>
/// Класс перевода одинаковых свойств из класса TF в класс T. /// Класс перевода одинаковых свойств из класса TF в класс T.
@ -85,7 +85,8 @@ public static class SimpleMapper
//или режим "Только не по умолчанию" и значение по умолчанию //или режим "Только не по умолчанию" и значение по умолчанию
//то пропускаем //то пропускаем
bool result = bool result =
mode switch { mode switch
{
MapMode.MapFull => true, MapMode.MapFull => true,
MapMode.MapNotNull => itemValue != null, MapMode.MapNotNull => itemValue != null,
MapMode.MapByList => list.Contains(itemName), MapMode.MapByList => list.Contains(itemName),

View File

@ -1,4 +1,4 @@
namespace anbs_cp; namespace anbs_cp.Classes;
/// <summary> /// <summary>
/// Класс проверки временного интервала /// Класс проверки временного интервала
@ -9,14 +9,14 @@ public static class TimestampValidator
/// Проверка попадания в заданный интервал (в мс) /// Проверка попадания в заданный интервал (в мс)
/// </summary> /// </summary>
/// <param name="timestamp">Временной интервал</param> /// <param name="timestamp">Временной интервал</param>
/// <param name="checkedstamp">Проверяемый временной интервал</param> /// <param name="checkedStamp">Проверяемый временной интервал</param>
/// <param name="deltams">Временная дельта в миллисекундах</param> /// <param name="deltaMs">Временная дельта в миллисекундах</param>
/// <returns> /// <returns>
/// Попал ли <paramref name="checkedstamp" /> в промежуток <paramref name="timestamp" /> + /// Попал ли <paramref name="checkedStamp" /> в промежуток <paramref name="timestamp" /> +
/// <paramref name="deltams" /> /// <paramref name="deltaMs" />
/// </returns> /// </returns>
public static bool Validate(long timestamp, long checkedstamp, ulong deltams) => public static bool Validate(long timestamp, long checkedStamp, ulong deltaMs) =>
new TimeSpan(timestamp) + TimeSpan.FromMilliseconds(deltams) > new TimeSpan(checkedstamp); new TimeSpan(timestamp) + TimeSpan.FromMilliseconds(deltaMs) > new TimeSpan(checkedStamp);
/// <summary> /// <summary>
/// Проверка попадания текущего времени в заданный интервал (в мс) /// Проверка попадания текущего времени в заданный интервал (в мс)

View File

@ -1,7 +1,7 @@
using System.Text.Encodings.Web; using System.Text.Encodings.Web;
using Microsoft.AspNetCore.Html; using Microsoft.AspNetCore.Html;
namespace anbs_cp; namespace anbs_cp.Classes;
/// <summary> /// <summary>
/// Конвертер типов на манер Delphi /// Конвертер типов на манер Delphi

View File

@ -0,0 +1,14 @@
namespace anbs_cp.Interfaces;
/// <summary>
/// Интерфейс ошибки
/// </summary>
public interface IActionError : IActionStateMessage
{
/// <summary>
/// Критичность ошибки:
/// при некритичных ошибках продолжение выполнения операции возможно,
/// а при критичных -- нет
/// </summary>
public bool IsCritical { get; init; }
}

View File

@ -0,0 +1,12 @@
namespace anbs_cp.Interfaces;
/// <summary>
/// Интерфейс для информации по статусу
/// </summary>
public interface IActionInfo : IActionStateMessage
{
/// <summary>
/// Статусная информация (например, начало работы)
/// </summary>
public bool IsStatusInfo { get; init; }
}

View File

@ -0,0 +1,24 @@
namespace anbs_cp.Interfaces;
/// <summary>
/// Интерфейс сообщения состояния
/// </summary>
public interface IActionStateMessage
{
/// <summary>
/// Объект сообщения
/// </summary>
public object Object { get; set; }
/// <summary>
/// Текст сообщения
/// </summary>
public string Message { get; set; }
/// <summary>
/// Функция вывода сообщения
/// </summary>
/// <param name="format">Строка-форматирование (например, «[{0}] - {1}»)</param>
/// <returns>Отформатированную строка</returns>
public string PrintMessage (string format) => string.Format (format, Object, Message);
}

View File

@ -0,0 +1,12 @@
namespace anbs_cp.Interfaces;
/// <summary>
/// Интерфейс предупреждения
/// </summary>
public interface IActionWarning : IActionStateMessage
{
/// <summary>
/// Информирующее предупреждение возникает для предупреждения ВОЗМОЖНОЙ ошибки в дальнейшей эксплуатации и не влияет на текущую операцию.
/// </summary>
public bool IsInformWarning { get; init; }
}

View File

@ -1,8 +1,8 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<TargetFramework>net6.0</TargetFramework> <TargetFramework>net7.0</TargetFramework>
<Version>1.2022.1028</Version> <Version>1.2022.1130</Version>
<Authors>Alexander Babaev</Authors> <Authors>Alexander Babaev</Authors>
<Product>ANB Software Components Pack</Product> <Product>ANB Software Components Pack</Product>
<Description>Library of some useful functions in C# language.</Description> <Description>Library of some useful functions in C# language.</Description>
@ -12,29 +12,31 @@
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<GenerateDocumentationFile>True</GenerateDocumentationFile> <GenerateDocumentationFile>True</GenerateDocumentationFile>
<SignAssembly>False</SignAssembly> <SignAssembly>True</SignAssembly>
<PackageProjectUrl>https://git.babaev-an.ru/babaev-an/anbsoftware_componentspack</PackageProjectUrl> <PackageProjectUrl>https://git.babaev-an.ru/babaev-an/anbsoftware_componentspack</PackageProjectUrl>
<RepositoryUrl>https://git.babaev-an.ru/babaev-an/anbsoftware_componentspack</RepositoryUrl> <RepositoryUrl>https://git.babaev-an.ru/babaev-an/anbsoftware_componentspack</RepositoryUrl>
<AssemblyVersion>1.2022.1028</AssemblyVersion> <AssemblyVersion>1.2022.1130</AssemblyVersion>
<FileVersion>1.2022.1028</FileVersion> <FileVersion>1.2022.1130</FileVersion>
<PackageId>ANBSoftware.ComponentsPack</PackageId> <PackageId>ANBSoftware.ComponentsPack</PackageId>
<PackageLicenseExpression>MIT</PackageLicenseExpression> <PackageLicenseExpression>MIT</PackageLicenseExpression>
<AnalysisLevel>6.0</AnalysisLevel> <AnalysisLevel>6.0</AnalysisLevel>
<RepositoryType>git</RepositoryType>
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<WarningLevel>2</WarningLevel> <WarningLevel>7</WarningLevel>
<CheckForOverflowUnderflow>True</CheckForOverflowUnderflow> <CheckForOverflowUnderflow>True</CheckForOverflowUnderflow>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
<WarningLevel>2</WarningLevel> <WarningLevel>7</WarningLevel>
<CheckForOverflowUnderflow>True</CheckForOverflowUnderflow> <CheckForOverflowUnderflow>True</CheckForOverflowUnderflow>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Html.Abstractions" Version="2.2.0" /> <PackageReference Include="Microsoft.AspNetCore.Html.Abstractions" Version="2.2.0" />
<PackageReference Include="Microsoft.VisualStudio.Shell.Interop" Version="17.1.32210.191" /> <PackageReference Include="Microsoft.VisualStudio.Shell.Interop" Version="17.4.33103.184" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -0,0 +1,2 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:String x:Key="/Default/CodeInspection/CSharpLanguageProject/LanguageLevel/@EntryValue">CSharp110</s:String></wpf:ResourceDictionary>

View File

@ -1,6 +1,6 @@
namespace demo; namespace demo;
partial class CountValueTest sealed partial class CountValueTest
{ {
/// <summary> /// <summary>
/// Required designer variable. /// Required designer variable.

View File

@ -1,8 +1,8 @@
using anbs_cp; using anbs_cp.Classes;
namespace demo; namespace demo;
public partial class CountValueTest: Form public sealed partial class CountValueTest: Form
{ {
public CountValueTest () public CountValueTest ()
{ {

View File

@ -1,14 +1,4 @@
using System; namespace demo;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace demo;
public sealed partial class MainMenu: Form public sealed partial class MainMenu: Form
{ {
public MainMenu () public MainMenu ()

View File

@ -88,7 +88,7 @@ sealed partial class SampleMapperTest
// ResultArea // ResultArea
// //
this.ResultArea.Dock = System.Windows.Forms.DockStyle.Right; this.ResultArea.Dock = System.Windows.Forms.DockStyle.Right;
this.ResultArea.Location = new System.Drawing.Point(811, 0); this.ResultArea.Location = new System.Drawing.Point(819, 0);
this.ResultArea.Multiline = true; this.ResultArea.Multiline = true;
this.ResultArea.Name = "ResultArea"; this.ResultArea.Name = "ResultArea";
this.ResultArea.ReadOnly = true; this.ResultArea.ReadOnly = true;
@ -150,7 +150,7 @@ sealed partial class SampleMapperTest
// //
this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F); this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(1143, 378); this.ClientSize = new System.Drawing.Size(1151, 378);
this.Controls.Add(this.MapModeLabel); this.Controls.Add(this.MapModeLabel);
this.Controls.Add(this.MapModeEdit); this.Controls.Add(this.MapModeEdit);
this.Controls.Add(this.DemoDateTimeLabel); this.Controls.Add(this.DemoDateTimeLabel);

View File

@ -1,5 +1,4 @@
using anbs_cp; using anbs_cp.Classes;
using Newtonsoft.Json; using Newtonsoft.Json;
namespace demo; namespace demo;

View File

@ -57,9 +57,4 @@
<resheader name="writer"> <resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<data name="SampleMapperTest_MapBtn_Click_" xml:space="preserve">
<value>Demo2 Class before map:
{0}
and after:{1}</value>
</data>
</root> </root>

View File

@ -2,13 +2,12 @@
<PropertyGroup> <PropertyGroup>
<OutputType>WinExe</OutputType> <OutputType>WinExe</OutputType>
<TargetFramework>net6.0-windows10.0.22000.0</TargetFramework> <TargetFramework>net7.0-windows</TargetFramework>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<UseWindowsForms>true</UseWindowsForms> <UseWindowsForms>true</UseWindowsForms>
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<Configurations>Release;Debug.CNF</Configurations> <Configurations>Release;Debug.CNF</Configurations>
<SupportedOSPlatformVersion>7.0</SupportedOSPlatformVersion> <StartupObject>demo.Program</StartupObject>
<StartupObject></StartupObject>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
@ -20,7 +19,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" /> <PackageReference Include="Newtonsoft.Json" Version="13.0.2" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>