Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions .github/copilot-instructions.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

## Project Overview

SharedCode is a multi-project .NET 9 solution that provides reusable utility libraries
SharedCode is a multi-project .NET solution that provides reusable utility libraries
published as individual NuGet packages. Each project corresponds to one NuGet package:

| Project | NuGet Package | Purpose |
Expand Down Expand Up @@ -34,7 +34,9 @@ dotnet test --logger GitHubActions --verbosity normal SharedCode.sln

### Language & Framework

- **Target framework**: `net9.0`
- **Target frameworks**:
- Primary/current: `.NET 10` (`net10.0`)
- Compatibility targets: `.NET 9` (`net9.0`), `.NET 8` (`net8.0`), and `.NET Standard 2.0/2.1` where applicable
- **Language version**: `preview` (latest C# features enabled)
- **Nullable reference types**: enabled (`<Nullable>enable</Nullable>`)
- **Implicit usings**: enabled
Expand Down
2 changes: 1 addition & 1 deletion .github/prompts/create-module.prompt.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ belong here.
<Description>A library of [short description] shared for free use to help with common scenarios.</Description>
<PackageTags>shared code, c#, [relevant tags]</PackageTags>
<RootNamespace>SharedCode.<ModuleName></RootNamespace>
<TargetFramework>net9.0</TargetFramework>
<TargetFrameworks>net9.0;net10.0</TargetFrameworks>
</PropertyGroup>

<ItemGroup>
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/dotnet.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ jobs:
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: 9.0.x
dotnet-version: 10.0.x

- name: Run tests
run: dotnet test --logger GitHubActions SharedCode.sln
16 changes: 8 additions & 8 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@ jobs:
- uses: actions/checkout@v3

- name: Setup .NET
uses: actions/setup-dotnet@v2
uses: actions/setup-dotnet@v4
with:
dotnet-version: 9.0.x
dotnet-version: 10.0.x

- name: Run Tests
run: dotnet test --logger GitHubActions --verbosity normal SharedCode.sln
Expand All @@ -34,9 +34,9 @@ jobs:
- uses: actions/checkout@v3

- name: Setup .NET
uses: actions/setup-dotnet@v2
uses: actions/setup-dotnet@v4
with:
dotnet-version: 9.0.x
dotnet-version: 10.0.x

- name: Bump version and push tag
id: tag_version
Expand Down Expand Up @@ -73,9 +73,9 @@ jobs:
name: PackedLib

- name: Setup .NET
uses: actions/setup-dotnet@v2
uses: actions/setup-dotnet@v4
with:
dotnet-version: 9.0.x
dotnet-version: 10.0.x

- name: Push Package to GitHub
run: dotnet nuget push --api-key ${{secrets.GITHUB_TOKEN}} --source "https://nuget.pkg.github.com/improvgroup/index.json" *.nupkg
Expand All @@ -93,9 +93,9 @@ jobs:
name: PackedLib

- name: Setup .NET
uses: actions/setup-dotnet@v2
uses: actions/setup-dotnet@v4
with:
dotnet-version: 9.0.x
dotnet-version: 10.0.x

- name: Push Package to NuGet
run: dotnet nuget push --api-key ${{secrets.NUGET_API_KEY}} --source "https://api.nuget.org/v3/index.json" *.nupkg
8 changes: 7 additions & 1 deletion Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
<IncludeSymbols>true</IncludeSymbols>
<LangVersion>preview</LangVersion>
<NeutralLanguage>en-US</NeutralLanguage>
<NoWarn>$(NoWarn);CA1014</NoWarn>
<NoWarn>$(NoWarn);CA1014;NU1510</NoWarn>
<Nullable>enable</Nullable>
<PackageIcon>share.png</PackageIcon>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
Expand Down Expand Up @@ -100,6 +100,12 @@
<None Include="$(SolutionDir)\logo.png" Pack="true" Visible="false" PackagePath="\"/>
<None Include="$(SolutionDir)\README.md" Pack="true" Visible="false" PackagePath="\"/>
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'net10.0' OR '$(TargetFramework)' == 'net10.0-windows10.0.22621.0'">
<PackageReference Update="GCop.All.Common" ExcludeAssets="analyzers" />
</ItemGroup>
<PropertyGroup Condition="'$(TargetFramework)' == 'net10.0' OR '$(TargetFramework)' == 'net10.0-windows10.0.22621.0'">
<RunAnalyzersDuringBuild>false</RunAnalyzersDuringBuild>
</PropertyGroup>
<Target Name="SetSourceRevisionId" BeforeTargets="InitializeSourceControlInformation">
<Exec Command="git describe --long --always --dirty --exclude=* --abbrev=8" ConsoleToMSBuild="True" IgnoreExitCode="False">
<!--<Output PropertyName="SourceRevisionId" TaskParameter="ConsoleOutput" />-->
Expand Down
40 changes: 21 additions & 19 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,19 +42,20 @@ in only what you need.

| Package | NuGet | Target Frameworks | Description |
|---|---|---|---|
| `SharedCode.Core` | [![NuGet](https://img.shields.io/nuget/v/SharedCode.Core.svg)](https://www.nuget.org/packages/SharedCode.Core) | `netstandard2.0`, `netstandard2.1`, `net8.0`, `net9.0` | Core utilities: extensions, specifications, domain primitives, security, threading, reactive |
| `SharedCode.Data` | [![NuGet](https://img.shields.io/nuget/v/SharedCode.Data.svg)](https://www.nuget.org/packages/SharedCode.Data) | `netstandard2.0`, `netstandard2.1`, `net8.0`, `net9.0` | Framework-agnostic data access abstractions: repository pattern, paging, query results |
| `SharedCode.Data.CosmosDb` | [![NuGet](https://img.shields.io/nuget/v/SharedCode.Data.CosmosDb.svg)](https://www.nuget.org/packages/SharedCode.Data.CosmosDb) | `net8.0`, `net9.0` | Azure Cosmos DB integration and helpers |
| `SharedCode.Data.EntityFramework` | [![NuGet](https://img.shields.io/nuget/v/SharedCode.Data.EntityFramework.svg)](https://www.nuget.org/packages/SharedCode.Data.EntityFramework) | `net8.0`, `net9.0` | Entity Framework Core integration: auditable contexts, EF repository, specifications |
| `SharedCode.DependencyInjection` | [![NuGet](https://img.shields.io/nuget/v/SharedCode.DependencyInjection.svg)](https://www.nuget.org/packages/SharedCode.DependencyInjection) | `netstandard2.0`, `netstandard2.1`, `net8.0`, `net9.0` | DI assembly scanning and auto-registration via `IDependencyRegister` |
| `SharedCode.MediatR` | [![NuGet](https://img.shields.io/nuget/v/SharedCode.MediatR.svg)](https://www.nuget.org/packages/SharedCode.MediatR) | `net8.0`, `net9.0` | MediatR command/query abstractions and pipeline helpers |
| `SharedCode.Web` | [![NuGet](https://img.shields.io/nuget/v/SharedCode.Web.svg)](https://www.nuget.org/packages/SharedCode.Web) | `net9.0` | ASP.NET Core helpers: base controller, resilient HTTP client setup, health checks |
| `SharedCode.Windows.WPF` | [![NuGet](https://img.shields.io/nuget/v/SharedCode.Windows.WPF.svg)](https://www.nuget.org/packages/SharedCode.Windows.WPF) | `net9.0-windows10.0.22621.0` | WPF helpers: `BindableBase`, value converters, attached properties, MVVM mediator |
| `SharedCode.Core` | [![NuGet](https://img.shields.io/nuget/v/SharedCode.Core.svg)](https://www.nuget.org/packages/SharedCode.Core) | `netstandard2.0`, `netstandard2.1`, `net8.0`, `net9.0`, `net10.0` | Core utilities: extensions, specifications, domain primitives, security, threading, reactive |
| `SharedCode.Data` | [![NuGet](https://img.shields.io/nuget/v/SharedCode.Data.svg)](https://www.nuget.org/packages/SharedCode.Data) | `netstandard2.0`, `netstandard2.1`, `net8.0`, `net9.0`, `net10.0` | Framework-agnostic data access abstractions: repository pattern, paging, query results |
| `SharedCode.Data.CosmosDb` | [![NuGet](https://img.shields.io/nuget/v/SharedCode.Data.CosmosDb.svg)](https://www.nuget.org/packages/SharedCode.Data.CosmosDb) | `net8.0`, `net9.0`, `net10.0` | Azure Cosmos DB integration and helpers |
| `SharedCode.Data.EntityFramework` | [![NuGet](https://img.shields.io/nuget/v/SharedCode.Data.EntityFramework.svg)](https://www.nuget.org/packages/SharedCode.Data.EntityFramework) | `net8.0`, `net9.0`, `net10.0` | Entity Framework Core integration: auditable contexts, EF repository, specifications |
| `SharedCode.DependencyInjection` | [![NuGet](https://img.shields.io/nuget/v/SharedCode.DependencyInjection.svg)](https://www.nuget.org/packages/SharedCode.DependencyInjection) | `netstandard2.0`, `netstandard2.1`, `net8.0`, `net9.0`, `net10.0` | DI assembly scanning and auto-registration via `IDependencyRegister` |
| `SharedCode.MediatR` | [![NuGet](https://img.shields.io/nuget/v/SharedCode.MediatR.svg)](https://www.nuget.org/packages/SharedCode.MediatR) | `net8.0`, `net9.0`, `net10.0` | MediatR command/query abstractions and pipeline helpers |
| `SharedCode.Web` | [![NuGet](https://img.shields.io/nuget/v/SharedCode.Web.svg)](https://www.nuget.org/packages/SharedCode.Web) | `net9.0`, `net10.0` | ASP.NET Core helpers: base controller, resilient HTTP client setup, health checks |
| `SharedCode.Windows.WPF` | [![NuGet](https://img.shields.io/nuget/v/SharedCode.Windows.WPF.svg)](https://www.nuget.org/packages/SharedCode.Windows.WPF) | `net9.0-windows10.0.22621.0`, `net10.0-windows10.0.22621.0` | WPF helpers: `BindableBase`, value converters, attached properties, MVVM mediator |

---

## Requirements

- [.NET 10 SDK](https://dotnet.microsoft.com/download/dotnet/10.0) (for `net10.0` targets)
- [.NET 9 SDK](https://dotnet.microsoft.com/download/dotnet/9.0) (for `net9.0` targets)
- [.NET 8 SDK](https://dotnet.microsoft.com/download/dotnet/8.0) (for `net8.0` targets)
- .NET Standard 2.0 / 2.1 targets are compatible with .NET Framework 4.6.1+ and .NET Core 2.0+
Expand Down Expand Up @@ -100,7 +101,7 @@ Install-Package SharedCode.Windows.WPF
[![NuGet](https://img.shields.io/nuget/v/SharedCode.Core.svg)](https://www.nuget.org/packages/SharedCode.Core)

Core utilities and domain primitives that are shared across all other packages. Targets
`netstandard2.0`, `netstandard2.1`, `net8.0`, and `net9.0`.
`netstandard2.0`, `netstandard2.1`, `net8.0`, `net9.0`, and `net10.0`.

**Highlights**

Expand Down Expand Up @@ -137,7 +138,7 @@ public sealed class ActiveUsersSpec : Specification<User>
[![NuGet](https://img.shields.io/nuget/v/SharedCode.Data.svg)](https://www.nuget.org/packages/SharedCode.Data)

Framework-agnostic data access abstractions. Targets `netstandard2.0`, `netstandard2.1`,
`net8.0`, and `net9.0`.
`net8.0`, `net9.0`, and `net10.0`.

**Highlights**

Expand Down Expand Up @@ -170,7 +171,7 @@ public class UserService

Azure Cosmos DB integration built on top of the official
[Microsoft.Azure.Cosmos](https://www.nuget.org/packages/Microsoft.Azure.Cosmos) SDK.
Targets `net8.0` and `net9.0`.
Targets `net8.0`, `net9.0`, and `net10.0`.

**Highlights**

Expand All @@ -183,7 +184,7 @@ Targets `net8.0` and `net9.0`.

[![NuGet](https://img.shields.io/nuget/v/SharedCode.Data.EntityFramework.svg)](https://www.nuget.org/packages/SharedCode.Data.EntityFramework)

Entity Framework Core integration. Targets `net8.0` and `net9.0`.
Entity Framework Core integration. Targets `net8.0`, `net9.0`, and `net10.0`.

**Highlights**

Expand Down Expand Up @@ -213,7 +214,7 @@ services.AddDbContext<AppDbContext>(options =>
[![NuGet](https://img.shields.io/nuget/v/SharedCode.DependencyInjection.svg)](https://www.nuget.org/packages/SharedCode.DependencyInjection)

Assembly scanning and automatic service registration. Targets `netstandard2.0`,
`netstandard2.1`, `net8.0`, and `net9.0`.
`netstandard2.1`, `net8.0`, `net9.0`, and `net10.0`.

**Highlights**

Expand Down Expand Up @@ -241,8 +242,8 @@ public class MyServiceRegistrar : IDependencyRegister

[![NuGet](https://img.shields.io/nuget/v/SharedCode.MediatR.svg)](https://www.nuget.org/packages/SharedCode.MediatR)

[MediatR](https://github.com/jbogard/MediatR) pipeline abstractions. Targets `net8.0` and
`net9.0`.
[MediatR](https://github.com/jbogard/MediatR) pipeline abstractions. Targets `net8.0`,
`net9.0`, and `net10.0`.

**Highlights**

Expand Down Expand Up @@ -277,7 +278,7 @@ services.AddSharedCodeMediatR(typeof(Program).Assembly);

[![NuGet](https://img.shields.io/nuget/v/SharedCode.Web.svg)](https://www.nuget.org/packages/SharedCode.Web)

ASP.NET Core helpers. Targets `net9.0`.
ASP.NET Core helpers. Targets `net9.0` and `net10.0`.

**Highlights**

Expand All @@ -303,7 +304,7 @@ public class UsersController : BaseController

[![NuGet](https://img.shields.io/nuget/v/SharedCode.Windows.WPF.svg)](https://www.nuget.org/packages/SharedCode.Windows.WPF)

WPF helpers targeting `net9.0-windows10.0.22621.0`.
WPF helpers targeting `net9.0-windows10.0.22621.0` and `net10.0-windows10.0.22621.0`.

**Highlights**

Expand Down Expand Up @@ -334,8 +335,9 @@ dotnet build SharedCode.sln
dotnet test SharedCode.sln
```

The solution targets **.NET 9** for the library projects. The WPF project additionally requires
Windows 10 SDK version 10.0.19041.0 or later.
The solution targets **.NET 8, .NET 9, and .NET 10** for library projects (plus .NET Standard
2.0/2.1 compatibility for selected packages). The WPF project additionally requires Windows 10 SDK
version 10.0.19041.0 or later.

---

Expand Down
44 changes: 37 additions & 7 deletions SharedCode.Core.Tests/Calendar/DateTimeExtensionsTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ namespace SharedCode.Tests.Calendar;
using SharedCode.Calendar;

using System.Diagnostics.CodeAnalysis;
using System.Globalization;

/// <summary>
/// The date time extensions tests class
Expand All @@ -26,6 +27,16 @@ public class DateTimeExtensionsTests
/// </summary>
private DateTime originalDateTime;

/// <summary>
/// The original culture before test execution.
/// </summary>
private CultureInfo? originalCulture;

/// <summary>
/// The original UI culture before test execution.
/// </summary>
private CultureInfo? originalUiCulture;

[TestMethod]
[DataRow(5, 2022, 12, 11, 2022, 12, 19)]
[DataRow(3, 2022, 12, 10, 2022, 12, 15)]
Expand Down Expand Up @@ -61,7 +72,7 @@ public void AddWorkdays_SkipsWeekends()
public void Can_Get_Full_Long_Date_Time_String()
{
var result = this.originalDateTime.ToStringFormat(() => DateTimeFormat.FullLongDateTime);
Assert.AreEqual("Sunday, March 11, 1984 2:30:58 AM", result);
Assert.AreEqual("Sunday, March 11, 1984 2:30:58 AM", NormalizeWhitespace(result));
}

/// <summary>
Expand All @@ -71,7 +82,7 @@ public void Can_Get_Full_Long_Date_Time_String()
public void Can_Get_Full_Short_Date_Time_String()
{
var result = this.originalDateTime.ToStringFormat(() => DateTimeFormat.FullShortDateTime);
Assert.AreEqual("Sunday, March 11, 1984 2:30 AM", result);
Assert.AreEqual("Sunday, March 11, 1984 2:30 AM", NormalizeWhitespace(result));
}

/// <summary>
Expand All @@ -81,7 +92,7 @@ public void Can_Get_Full_Short_Date_Time_String()
public void Can_Get_General_Long_Date_Time_String()
{
var result = this.originalDateTime.ToStringFormat(() => DateTimeFormat.GeneralLongDateTime);
Assert.AreEqual("3/11/1984 2:30:58 AM", result);
Assert.AreEqual("3/11/1984 2:30:58 AM", NormalizeWhitespace(result));
}

/// <summary>
Expand All @@ -91,7 +102,7 @@ public void Can_Get_General_Long_Date_Time_String()
public void Can_Get_General_Short_Date_Time_String()
{
var result = this.originalDateTime.ToStringFormat(() => DateTimeFormat.GeneralShortDateTime);
Assert.AreEqual("3/11/1984 2:30 AM", result);
Assert.AreEqual("3/11/1984 2:30 AM", NormalizeWhitespace(result));
}

/// <summary>
Expand All @@ -111,7 +122,7 @@ public void Can_Get_Long_Date_String()
public void Can_Get_Long_Time_String()
{
var result = this.originalDateTime.ToStringFormat(() => DateTimeFormat.LongTime);
Assert.AreEqual("2:30:58 AM", result);
Assert.AreEqual("2:30:58 AM", NormalizeWhitespace(result));
}

/// <summary>
Expand Down Expand Up @@ -171,7 +182,7 @@ public void Can_Get_Short_Date_String()
public void Can_Get_Short_Time_String()
{
var result = this.originalDateTime.ToStringFormat(() => DateTimeFormat.ShortTime);
Assert.AreEqual("2:30 AM", result);
Assert.AreEqual("2:30 AM", NormalizeWhitespace(result));
}

/// <summary>
Expand Down Expand Up @@ -219,7 +230,14 @@ public void Can_Get_Year_Month_Upper_Case_String()
/// Initializes the test case.
/// </summary>
[TestInitialize]
public void InitTestCase() => this.originalDateTime = new DateTime(Year, Month, Day, Hour, Minute, Second);
public void InitTestCase()
{
this.originalCulture = CultureInfo.CurrentCulture;
this.originalUiCulture = CultureInfo.CurrentUICulture;
CultureInfo.CurrentCulture = CultureInfo.GetCultureInfo("en-US");
CultureInfo.CurrentUICulture = CultureInfo.GetCultureInfo("en-US");
this.originalDateTime = new DateTime(Year, Month, Day, Hour, Minute, Second);
}

/// <summary>
/// Teardowns the test case.
Expand All @@ -232,5 +250,17 @@ public void TeardownTestCase()
{
GC.SuppressFinalize(this.originalDateTime);
}

if (this.originalCulture is not null)
{
CultureInfo.CurrentCulture = this.originalCulture;
}

if (this.originalUiCulture is not null)
{
CultureInfo.CurrentUICulture = this.originalUiCulture;
}
}

private static string NormalizeWhitespace(string value) => value.Replace('\u202F', ' ');
}
2 changes: 1 addition & 1 deletion SharedCode.Core.Tests/Core.Tests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<GeneratePackageOnBuild>false</GeneratePackageOnBuild>
<IsPackable>false</IsPackable>
<RootNamespace>SharedCode.Tests</RootNamespace>
<TargetFramework>net9.0</TargetFramework>
<TargetFrameworks>net9.0;net10.0</TargetFrameworks>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="AwesomeAssertions" />
Expand Down
2 changes: 1 addition & 1 deletion SharedCode.Core/Core.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<AssemblyName>SharedCode.Core</AssemblyName>
<LangVersion>latest</LangVersion>
<RootNamespace>SharedCode</RootNamespace>
<TargetFrameworks>netstandard2.0;netstandard2.1;net8.0;net9.0</TargetFrameworks>
<TargetFrameworks>netstandard2.0;netstandard2.1;net8.0;net9.0;net10.0</TargetFrameworks>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="GCop.All.Common">
Expand Down
2 changes: 1 addition & 1 deletion SharedCode.Data.CosmosDb/Data.CosmosDb.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<PropertyGroup>
<AssemblyName>SharedCode.Data.CosmosDb</AssemblyName>
<RootNamespace>SharedCode.Data.CosmosDb</RootNamespace>
<TargetFrameworks>net8.0;net9.0</TargetFrameworks>
<TargetFrameworks>net8.0;net9.0;net10.0</TargetFrameworks>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="GCop.All.Common">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<PropertyGroup>
<AssemblyName>SharedCode.Data.EntityFramework</AssemblyName>
<RootNamespace>SharedCode.Data.EntityFramework</RootNamespace>
<TargetFrameworks>net8.0;net9.0</TargetFrameworks>
<TargetFrameworks>net8.0;net9.0;net10.0</TargetFrameworks>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="GCop.All.Common">
Expand Down
2 changes: 1 addition & 1 deletion SharedCode.Data.Tests/Data.Tests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<GeneratePackageOnBuild>false</GeneratePackageOnBuild>
<IsPackable>false</IsPackable>
<RootNamespace>SharedCode.Data.Tests</RootNamespace>
<TargetFramework>net9.0</TargetFramework>
<TargetFrameworks>net9.0;net10.0</TargetFrameworks>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="GCop.All.Common">
Expand Down
2 changes: 1 addition & 1 deletion SharedCode.Data/Data.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<AssemblyName>SharedCode.Data</AssemblyName>
<LangVersion>latest</LangVersion>
<RootNamespace>SharedCode.Data</RootNamespace>
<TargetFrameworks>netstandard2.0;netstandard2.1;net8.0;net9.0</TargetFrameworks>
<TargetFrameworks>netstandard2.0;netstandard2.1;net8.0;net9.0;net10.0</TargetFrameworks>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="GCop.All.Common">
Expand Down
2 changes: 1 addition & 1 deletion SharedCode.DependencyInjection/DependencyInjection.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<LangVersion>latest</LangVersion>
<PackageTags>shared code, c#, utilities, dependency injection</PackageTags>
<RootNamespace>SharedCode.DependencyInjection</RootNamespace>
<TargetFrameworks>netstandard2.0;netstandard2.1;net8.0;net9.0</TargetFrameworks>
<TargetFrameworks>netstandard2.0;netstandard2.1;net8.0;net9.0;net10.0</TargetFrameworks>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="GCop.All.Common">
Expand Down
Loading
Loading