20231123
This commit is contained in:
parent
fa7bb78ed4
commit
77c602cd9c
@ -323,10 +323,11 @@ public class ActionState<T>
|
|||||||
#region Добавление другого состояния
|
#region Добавление другого состояния
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Добавляет другое состояние (например, результат другого действия, который возвращает <see cref="ActionState"/>).
|
/// Добавляет другое состояние (например, результат другого действия, который возвращает <see cref="ActionState"/>).
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
/// <typeparam name="T">Тип параметра</typeparam>
|
||||||
/// <param name="state">Запись состояния</param>
|
/// <param name="state">Запись состояния</param>
|
||||||
public void AddState(ActionState state)
|
public void AddState (ActionState<T> state)
|
||||||
{
|
{
|
||||||
AddErrors(state.Errors);
|
AddErrors(state.Errors);
|
||||||
AddWarnings(state.Warnings);
|
AddWarnings(state.Warnings);
|
||||||
|
@ -6,4 +6,14 @@
|
|||||||
/// Обновлено 2023.11.1
|
/// Обновлено 2023.11.1
|
||||||
/// * Добавлен класс ActionState без возвращаемого значения
|
/// * Добавлен класс ActionState без возвращаемого значения
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public sealed class ActionState: ActionState<string> { }
|
public sealed class ActionState: ActionState<string>
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Добавляет другое состояние (например, результат другого действия, который возвращает <see cref="ActionState"/>).
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="state">Запись состояния</param>
|
||||||
|
public void AddState (ActionState state)
|
||||||
|
{
|
||||||
|
base.AddState(state);
|
||||||
|
}
|
||||||
|
}
|
@ -3,24 +3,26 @@
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Обработчик параметров консоли
|
/// Обработчик параметров консоли
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public sealed class ConsoleParamsParser
|
/// <param name="consoleParams">Параметры консоли</param>
|
||||||
|
public sealed class ConsoleParamsParser (IEnumerable<string> consoleParams)
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Массив параметров
|
/// Массив параметров
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private readonly List<(string, string?)> _paramsList;
|
private readonly KeyValueList<string, string?> _paramsList = ParseConsoleParams(consoleParams);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Конструктор
|
/// Парсер параметров
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="consoleParams">Параметры консоли</param>
|
/// <param name="paramsList">Входящий список параметров</param>
|
||||||
public ConsoleParamsParser (string[] consoleParams)
|
/// <returns></returns>
|
||||||
|
private static KeyValueList<string, string?> ParseConsoleParams (IEnumerable<string> paramsList)
|
||||||
{
|
{
|
||||||
//Создаю список параметров
|
//Создаю список параметров
|
||||||
_paramsList = new();
|
KeyValueList<string, string?> result = new();
|
||||||
|
|
||||||
//Заполняю его
|
//Заполняю его
|
||||||
foreach (string consoleParam in consoleParams)
|
foreach (string consoleParam in paramsList)
|
||||||
{
|
{
|
||||||
//Индекс знака "="
|
//Индекс знака "="
|
||||||
int eqPlace = consoleParam.IndexOf('=');
|
int eqPlace = consoleParam.IndexOf('=');
|
||||||
@ -32,8 +34,11 @@ public sealed class ConsoleParamsParser
|
|||||||
string? value = eqPlace == -1 ? null : consoleParam[(eqPlace + 1)..].Trim(new[] { '"' });
|
string? value = eqPlace == -1 ? null : consoleParam[(eqPlace + 1)..].Trim(new[] { '"' });
|
||||||
|
|
||||||
//Сохраняю в списке
|
//Сохраняю в списке
|
||||||
_paramsList.Add((param.ToLower(), value));
|
result.Add(param.ToLower(), value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Возвращаю значение
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -42,7 +47,7 @@ public sealed class ConsoleParamsParser
|
|||||||
/// <param name="param">Параметр</param>
|
/// <param name="param">Параметр</param>
|
||||||
/// <returns>Есть ли параметр в списке</returns>
|
/// <returns>Есть ли параметр в списке</returns>
|
||||||
public bool HasParam (string param) =>
|
public bool HasParam (string param) =>
|
||||||
_paramsList.Any(keyValue => keyValue.Item1 == param.ToLower());
|
_paramsList.Any(keyValue => keyValue.Key == param.ToLower());
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Получает значение параметра
|
/// Получает значение параметра
|
||||||
@ -50,12 +55,12 @@ public sealed class ConsoleParamsParser
|
|||||||
/// <param name="param"></param>
|
/// <param name="param"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public string? GetValue (string param) =>
|
public string? GetValue (string param) =>
|
||||||
!HasParam(param) ? null : _paramsList.FirstOrDefault(keyValue => keyValue.Item1 == param.ToLower()).Item2;
|
!HasParam(param) ? null : _paramsList.FirstOrDefault(keyValue => keyValue.Key == param.ToLower()).Value;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Получает список всех параметров
|
/// Получает список всех параметров
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns>Список всех параметров</returns>
|
/// <returns>Список всех параметров</returns>
|
||||||
public List<string> GetParamsList () =>
|
public List<string?> GetParamsList () =>
|
||||||
_paramsList.Select(static keyValue => keyValue.Item1.ToLower()).ToList();
|
_paramsList.Select(static keyValue => keyValue.Key?.ToLower()).ToList();
|
||||||
}
|
}
|
@ -3,19 +3,11 @@
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Конвертер количества элементов
|
/// Конвертер количества элементов
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public sealed class CountConverter : ValueConverter
|
public sealed class CountConverter (IEnumerable<string> valueNames, byte decimalPlace = 0): ValueConverter(
|
||||||
|
valueNames, 1000, decimalPlace)
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Имена размеров файлов по умолчанию
|
/// Имена размеров файлов по умолчанию
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static readonly string[] DefaultNames = {"", "тыс.", "млн."};
|
public static readonly string[] DefaultNames = { "", "тыс.", "млн." };
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Конструктор класса
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="valueNames">Массив имён размерностей</param>
|
|
||||||
/// <param name="decimalPlace">Знаков после запятой (0, 1, 2)</param>
|
|
||||||
public CountConverter (string[] valueNames, byte decimalPlace = 0) : base(valueNames, 1000, decimalPlace)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -3,19 +3,13 @@
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Конвертер размеров файлов
|
/// Конвертер размеров файлов
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public sealed class FileSizeConverter : ValueConverter
|
/// <param name="valueNames">Массив имён размерностей</param>
|
||||||
|
/// <param name="decimalPlace">Знаков после запятой (0, 1, 2)</param>
|
||||||
|
public sealed class FileSizeConverter (IEnumerable<string> valueNames, byte decimalPlace = 2): ValueConverter(
|
||||||
|
valueNames, 1024, decimalPlace)
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Имена размеров файлов по умолчанию
|
/// Имена размеров файлов по умолчанию
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static readonly string[] DefaultNames = {"байт", "Кб", "Мб", "Гб", "Тб"};
|
public static readonly string[] DefaultNames = { "байт", "Кб", "Мб", "Гб", "Тб" };
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Конструктор класса
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="valueNames">Массив имён размерностей</param>
|
|
||||||
/// <param name="decimalPlace">Знаков после запятой (0, 1, 2)</param>
|
|
||||||
public FileSizeConverter (string[] valueNames, byte decimalPlace = 2) : base(valueNames, 1024, decimalPlace)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -9,7 +9,7 @@ namespace anbs_cp.Classes;
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <typeparam name="TK">Тип ключа</typeparam>
|
/// <typeparam name="TK">Тип ключа</typeparam>
|
||||||
/// <typeparam name="TV">Тип значения</typeparam>
|
/// <typeparam name="TV">Тип значения</typeparam>
|
||||||
public class KeyValueList<TK, TV>: IEnumerable<KeyValue<TK, TV>>
|
public sealed class KeyValueList<TK, TV>: IEnumerable<KeyValue<TK, TV>>
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Хранение значений
|
/// Хранение значений
|
||||||
@ -58,7 +58,7 @@ public class KeyValueList<TK, TV>: IEnumerable<KeyValue<TK, TV>>
|
|||||||
public void ChangeValue (KeyValue<TK, TV> keyValue)
|
public void ChangeValue (KeyValue<TK, TV> keyValue)
|
||||||
{
|
{
|
||||||
// Если такой ключ не существует
|
// Если такой ключ не существует
|
||||||
if (!Contains(keyValue.Key!))
|
if (!Contains(keyValue.Key))
|
||||||
{
|
{
|
||||||
// - тогда добавляю новое значение
|
// - тогда добавляю новое значение
|
||||||
Add(keyValue);
|
Add(keyValue);
|
||||||
@ -68,7 +68,7 @@ public class KeyValueList<TK, TV>: IEnumerable<KeyValue<TK, TV>>
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Существующее значение
|
// Существующее значение
|
||||||
KeyValue<TK, TV> existValue = GetItem(keyValue.Key!) ?? new();
|
KeyValue<TK, TV> existValue = GetItem(keyValue.Key) ?? new();
|
||||||
|
|
||||||
// Удаляем существующее
|
// Удаляем существующее
|
||||||
_list.Remove(existValue);
|
_list.Remove(existValue);
|
||||||
@ -92,6 +92,7 @@ public class KeyValueList<TK, TV>: IEnumerable<KeyValue<TK, TV>>
|
|||||||
public KeyValue<TK, TV>? GetItem (TK key)
|
public KeyValue<TK, TV>? GetItem (TK key)
|
||||||
{
|
{
|
||||||
// Ищем элемент в списке
|
// Ищем элемент в списке
|
||||||
|
// ReSharper disable once NullableWarningSuppressionIsUsed
|
||||||
foreach (KeyValue<TK, TV> keyValueItem in _list.Where(keyValueItem => keyValueItem.Key!.Equals(key)))
|
foreach (KeyValue<TK, TV> keyValueItem in _list.Where(keyValueItem => keyValueItem.Key!.Equals(key)))
|
||||||
// - возвращаем его при нахождении
|
// - возвращаем его при нахождении
|
||||||
return keyValueItem;
|
return keyValueItem;
|
||||||
@ -143,6 +144,7 @@ public class KeyValueList<TK, TV>: IEnumerable<KeyValue<TK, TV>>
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="key">Ключ элемента</param>
|
/// <param name="key">Ключ элемента</param>
|
||||||
/// <returns>Результат проверки</returns>
|
/// <returns>Результат проверки</returns>
|
||||||
|
// ReSharper disable once NullableWarningSuppressionIsUsed
|
||||||
public bool Contains (TK key) => Keys.Any(keyParam => keyParam!.Equals(key));
|
public bool Contains (TK key) => Keys.Any(keyParam => keyParam!.Equals(key));
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
@ -5,36 +5,27 @@ namespace anbs_cp.Classes;
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Абстрактный класс конвертера величин для отображения (улучшенный аналог ValueFormatter)
|
/// Абстрактный класс конвертера величин для отображения (улучшенный аналог ValueFormatter)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public abstract class ValueConverter: IValueConverter
|
/// <param name="valueNames">Массив имён размерностей</param>
|
||||||
|
/// <param name="divider">Делитель</param>
|
||||||
|
/// <param name="decimalPlaces">Число знаков после запятой</param>
|
||||||
|
public abstract class ValueConverter (IEnumerable<string> valueNames, long divider, byte decimalPlaces): IValueConverter
|
||||||
{
|
{
|
||||||
/// <summary>
|
|
||||||
/// Конструктор
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="valueNames">Массив имён размерностей</param>
|
|
||||||
/// <param name="divider">Делитель</param>
|
|
||||||
/// <param name="decimalPlaces">Число знаков после запятой</param>
|
|
||||||
protected ValueConverter (string[] valueNames, long divider, byte decimalPlaces)
|
|
||||||
{
|
|
||||||
ValueNames = valueNames;
|
|
||||||
Divider = divider;
|
|
||||||
DecimalPlaces = (byte)(decimalPlaces < 3 ? decimalPlaces : 2);
|
|
||||||
}
|
|
||||||
|
|
||||||
#region Реализация интерфейса
|
#region Реализация интерфейса
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Массив имён размерностей
|
/// Массив имён размерностей
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string[] ValueNames { get; init; }
|
public string[] ValueNames { get; init; } = valueNames.ToArray();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Делитель
|
/// Делитель
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public long Divider { get; init; }
|
public long Divider { get; init; } = divider;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Знаков после запятой (0, 1, 2)
|
/// Знаков после запятой (0, 1, 2)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public byte DecimalPlaces { get; init; }
|
public byte DecimalPlaces { get; init; } = (byte)(decimalPlaces < 3 ? decimalPlaces : 2);
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
@ -50,7 +41,8 @@ public abstract class ValueConverter: IValueConverter
|
|||||||
(decimal, int) result = DivideIt(value, 0);
|
(decimal, int) result = DivideIt(value, 0);
|
||||||
|
|
||||||
//Преобразую значение в строку
|
//Преобразую значение в строку
|
||||||
string resultValue = DecimalPlaces switch {
|
string resultValue = DecimalPlaces switch
|
||||||
|
{
|
||||||
0 => $"{result.Item1:F0}",
|
0 => $"{result.Item1:F0}",
|
||||||
1 => $"{result.Item1:F1}",
|
1 => $"{result.Item1:F1}",
|
||||||
_ => $"{result.Item1:F2}"
|
_ => $"{result.Item1:F2}"
|
||||||
@ -81,7 +73,7 @@ public abstract class ValueConverter: IValueConverter
|
|||||||
count++;
|
count++;
|
||||||
|
|
||||||
//... и продолжаем цикл
|
//... и продолжаем цикл
|
||||||
return DivideIt(value / Divider, count);
|
return DivideIt(value / Divider, count);
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
@ -1,51 +1,35 @@
|
|||||||
namespace anbs_cp.Structs;
|
namespace anbs_cp.Structs;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Пара ключ-значение
|
/// Пара ключ-значение
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <typeparam name="TK">Тип ключа</typeparam>
|
/// <typeparam name="TK">Тип ключа</typeparam>
|
||||||
/// <typeparam name="TV">Тип значения</typeparam>
|
/// <typeparam name="TV">Тип значения</typeparam>
|
||||||
public struct KeyValue<TK, TV>
|
/// <param name="key">Ключ</param>
|
||||||
|
/// <param name="value">Значение</param>
|
||||||
|
public struct KeyValue<TK, TV>(TK key, TV? value)
|
||||||
{
|
{
|
||||||
#region Конструкторы
|
|
||||||
/// <summary>
|
|
||||||
/// Конструктор по умолчанию
|
|
||||||
/// </summary>
|
|
||||||
public KeyValue ()
|
|
||||||
{
|
|
||||||
Key = default;
|
|
||||||
Value = default;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Конструктор со значениями
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="key">Ключ</param>
|
|
||||||
/// <param name="value">Значение</param>
|
|
||||||
public KeyValue (TK key, TV value)
|
|
||||||
{
|
|
||||||
Key = key;
|
|
||||||
Value = value;
|
|
||||||
}
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region Свойства
|
#region Свойства
|
||||||
/// <summary>
|
|
||||||
/// Ключ
|
|
||||||
/// </summary>
|
|
||||||
public TK? Key { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Значение
|
/// Ключ
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public TV? Value { get; set; }
|
public TK Key { get; set; } = key;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Значение
|
||||||
|
/// </summary>
|
||||||
|
public TV? Value { get; set; } = value;
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Методы
|
#region Методы
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Получает ключ-значение по умолчанию
|
/// Получает ключ-значение по умолчанию
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns>Ключ-значение по умолчанию</returns>
|
/// <returns>Ключ-значение по умолчанию</returns>
|
||||||
public static KeyValue<TK, TV> GetDefault() => new();
|
public static KeyValue<TK, TV> GetDefault() => new();
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
@ -3,40 +3,20 @@
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Двумерный размер
|
/// Двумерный размер
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public struct TwoDimSize
|
/// <param name="width">Длина</param>
|
||||||
|
/// <param name="height">Высота</param>
|
||||||
|
public struct TwoDimSize (int width = 0, int height = 0)
|
||||||
{
|
{
|
||||||
#region Приватные поля
|
#region Приватные поля
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Длина (приватное)
|
/// Длина (приватное)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private int _pWidth;
|
private int _pWidth = width;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Высота (приватное)
|
/// Высота (приватное)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private int _pHeight;
|
private int _pHeight = height;
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region Конструкторы
|
|
||||||
/// <summary>
|
|
||||||
/// Конструктор по умолчанию
|
|
||||||
/// </summary>
|
|
||||||
public TwoDimSize ()
|
|
||||||
{
|
|
||||||
Width = 0;
|
|
||||||
Height = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Конструктор
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="width">Длина</param>
|
|
||||||
/// <param name="height">Высота</param>
|
|
||||||
public TwoDimSize (int width, int height)
|
|
||||||
{
|
|
||||||
Width = width;
|
|
||||||
Height = height;
|
|
||||||
}
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Свойства
|
#region Свойства
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>net8.0</TargetFramework>
|
<TargetFramework>net8.0</TargetFramework>
|
||||||
<Version>2023.1115.0</Version>
|
<Version>2023.1123.0</Version>
|
||||||
<Authors>Александр Бабаев</Authors>
|
<Authors>Александр Бабаев</Authors>
|
||||||
<Product>Набор компонентов ANB Software</Product>
|
<Product>Набор компонентов ANB Software</Product>
|
||||||
<Description>Библиотека полезных методов языка C#</Description>
|
<Description>Библиотека полезных методов языка C#</Description>
|
||||||
|
@ -6,18 +6,16 @@ using MySqlConnector;
|
|||||||
|
|
||||||
namespace anbs_cp.Database.Classes;
|
namespace anbs_cp.Database.Classes;
|
||||||
|
|
||||||
public class MySqlEngine: IDbEngine
|
/// <summary>
|
||||||
|
/// База данных MySQL
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="connectionString">Строка подключения базы данных</param>
|
||||||
|
public class MySqlEngine (string connectionString): IDbEngine
|
||||||
{
|
{
|
||||||
/// <summary>
|
|
||||||
/// Конструктор
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="connectionString">Строка подключения базы данных</param>
|
|
||||||
public MySqlEngine (string connectionString) => ConnectionString = connectionString;
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Строка подключения базы данных
|
/// Строка подключения базы данных
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string ConnectionString { get; set; }
|
public string ConnectionString { get; set; } = connectionString;
|
||||||
|
|
||||||
#region Базовые операции
|
#region Базовые операции
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
<RootNamespace>anbs_cp.Database</RootNamespace>
|
<RootNamespace>anbs_cp.Database</RootNamespace>
|
||||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||||
<PackageId>ANBSoftware.ComponentsPack.Database</PackageId>
|
<PackageId>ANBSoftware.ComponentsPack.Database</PackageId>
|
||||||
<Version>2023.11.14.0</Version>
|
<Version>2023.11.23.0</Version>
|
||||||
<Company>Александр Бабаев</Company>
|
<Company>Александр Бабаев</Company>
|
||||||
<Product>Набор компонентов ANB Software для работы с БД</Product>
|
<Product>Набор компонентов ANB Software для работы с БД</Product>
|
||||||
<Description>Библиотека полезных методов языка C# для работы с базами данных</Description>
|
<Description>Библиотека полезных методов языка C# для работы с базами данных</Description>
|
||||||
@ -19,8 +19,8 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Dapper" Version="2.1.21" />
|
<PackageReference Include="Dapper" Version="2.1.24" />
|
||||||
<PackageReference Include="MySqlConnector" Version="2.3.0" />
|
<PackageReference Include="MySqlConnector" Version="2.3.1" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user