From 6e2605e31f24d7cd5b8f888f95fc827dda722679 Mon Sep 17 00:00:00 2001 From: Tudor Stanciu Date: Sat, 15 Apr 2023 21:55:28 +0300 Subject: [PATCH] Netmash.Extensions.Caching: 1.0.1 - Added release notes, icon and readme files --- .../CachingExtensions.cs | 4 ++- .../Extensions/DistributedCacheExtensions.cs | 4 ++- .../Netmash.Extensions.Caching.csproj | 23 ++++++++++-- .../Netmash.Extensions.Caching/README.md | 33 ++++++++++++++++++ .../ReleaseNotes.txt | 6 ++++ .../Services/CacheService.cs | 4 ++- .../Services/ICacheService.cs | 4 ++- .../Netmash.Extensions.Caching/netmash.png | Bin 0 -> 12141 bytes 8 files changed, 71 insertions(+), 7 deletions(-) create mode 100644 src/extensions/caching/Netmash.Extensions.Caching/README.md create mode 100644 src/extensions/caching/Netmash.Extensions.Caching/ReleaseNotes.txt create mode 100644 src/extensions/caching/Netmash.Extensions.Caching/netmash.png diff --git a/src/extensions/caching/Netmash.Extensions.Caching/CachingExtensions.cs b/src/extensions/caching/Netmash.Extensions.Caching/CachingExtensions.cs index 6bc8917..1275b30 100644 --- a/src/extensions/caching/Netmash.Extensions.Caching/CachingExtensions.cs +++ b/src/extensions/caching/Netmash.Extensions.Caching/CachingExtensions.cs @@ -1,4 +1,6 @@ -using Microsoft.Extensions.DependencyInjection; +// Copyright (c) 2021 Tudor Stanciu + +using Microsoft.Extensions.DependencyInjection; using Netmash.Extensions.Caching.Services; namespace Netmash.Extensions.Caching diff --git a/src/extensions/caching/Netmash.Extensions.Caching/Extensions/DistributedCacheExtensions.cs b/src/extensions/caching/Netmash.Extensions.Caching/Extensions/DistributedCacheExtensions.cs index 1d4be25..4066330 100644 --- a/src/extensions/caching/Netmash.Extensions.Caching/Extensions/DistributedCacheExtensions.cs +++ b/src/extensions/caching/Netmash.Extensions.Caching/Extensions/DistributedCacheExtensions.cs @@ -1,4 +1,6 @@ -using Microsoft.Extensions.Caching.Distributed; +// Copyright (c) 2021 Tudor Stanciu + +using Microsoft.Extensions.Caching.Distributed; using Newtonsoft.Json; using System.Threading; using System.Threading.Tasks; diff --git a/src/extensions/caching/Netmash.Extensions.Caching/Netmash.Extensions.Caching.csproj b/src/extensions/caching/Netmash.Extensions.Caching/Netmash.Extensions.Caching.csproj index 8f64870..6b0e4d3 100644 --- a/src/extensions/caching/Netmash.Extensions.Caching/Netmash.Extensions.Caching.csproj +++ b/src/extensions/caching/Netmash.Extensions.Caching/Netmash.Extensions.Caching.csproj @@ -2,12 +2,18 @@ net6.0 - Caching extensions + Netmash.Extensions.Caching simplifies the implementation of caching in a .NET service. https://lab.code-rove.com/gitea/bricks/netmash https://lab.code-rove.com/gitea/bricks/netmash Git - Netmash Cache - 1.0.0 + MIT + $([System.IO.File]::ReadAllText("$(MSBuildProjectDirectory)/ReleaseNotes.txt")) + Netmash Cache HomeLab CodeRove + netmash.png + README.md + Toodle HomeLab + Toodle Netmash + 1.0.1 @@ -16,4 +22,15 @@ + + + True + \ + + + True + \ + + + diff --git a/src/extensions/caching/Netmash.Extensions.Caching/README.md b/src/extensions/caching/Netmash.Extensions.Caching/README.md new file mode 100644 index 0000000..4b3c3a8 --- /dev/null +++ b/src/extensions/caching/Netmash.Extensions.Caching/README.md @@ -0,0 +1,33 @@ +# Netmash.Extensions.Caching + +***Netmash.Extensions.Caching*** is a NuGet package that simplifies the implementation of caching in a .NET service. + +## Package repository +Netmash.Extensions.Caching can be installed from my self hosted NuGet feed: https://lab.code-rove.com/public-nuget-server/ + +## Installation + +### Visual Studio + +#### NuGet.config file +```xml=! + + + + + + + + +``` + +Configure the above file in the Visual Studio solution or set the new NuGet feed in NuGet Package Manager. After one of this steps, Netmash.Extensions.Caching can be installed using NuGet Package Manager. + + +### CLI + +```bash=! +dotnet add package Netmash.Extensions.Caching --source https://lab.code-rove.com/public-nuget-server/v3/index.json +``` + +Run the above command in a console open in a .NET project directory. \ No newline at end of file diff --git a/src/extensions/caching/Netmash.Extensions.Caching/ReleaseNotes.txt b/src/extensions/caching/Netmash.Extensions.Caching/ReleaseNotes.txt new file mode 100644 index 0000000..756b788 --- /dev/null +++ b/src/extensions/caching/Netmash.Extensions.Caching/ReleaseNotes.txt @@ -0,0 +1,6 @@ +1.0.1 release [2023-04-15 21:15] +◾ Code refactoring +◾ Added release notes, icon and readme files + +1.0.0 release [2021-04-25 3:50] +◾ Initial release of Netmash.Extensions.Caching \ No newline at end of file diff --git a/src/extensions/caching/Netmash.Extensions.Caching/Services/CacheService.cs b/src/extensions/caching/Netmash.Extensions.Caching/Services/CacheService.cs index 88d9029..a54f030 100644 --- a/src/extensions/caching/Netmash.Extensions.Caching/Services/CacheService.cs +++ b/src/extensions/caching/Netmash.Extensions.Caching/Services/CacheService.cs @@ -1,4 +1,6 @@ -using Microsoft.Extensions.Caching.Distributed; +// Copyright (c) 2021 Tudor Stanciu + +using Microsoft.Extensions.Caching.Distributed; using Netmash.Extensions.Caching.Extensions; using System; using System.Collections.Concurrent; diff --git a/src/extensions/caching/Netmash.Extensions.Caching/Services/ICacheService.cs b/src/extensions/caching/Netmash.Extensions.Caching/Services/ICacheService.cs index f5c62b4..9243e80 100644 --- a/src/extensions/caching/Netmash.Extensions.Caching/Services/ICacheService.cs +++ b/src/extensions/caching/Netmash.Extensions.Caching/Services/ICacheService.cs @@ -1,4 +1,6 @@ -using System.Threading; +// Copyright (c) 2021 Tudor Stanciu + +using System.Threading; using System.Threading.Tasks; namespace Netmash.Extensions.Caching.Services diff --git a/src/extensions/caching/Netmash.Extensions.Caching/netmash.png b/src/extensions/caching/Netmash.Extensions.Caching/netmash.png new file mode 100644 index 0000000000000000000000000000000000000000..53d33712588534a5b84438fe22762bf07e279f41 GIT binary patch literal 12141 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 yv)TMpDvAk1Rmr8U%qdQ%