diff --git a/README.md b/README.md index 9c473792d..07d4297e0 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,10 @@ -# RSCG - 276 Examples of Roslyn Source Code Generators / 16 created by Microsoft / +# RSCG - 277 Examples of Roslyn Source Code Generators / 16 created by Microsoft / -The RSCG_Examples repository is a comprehensive documentation system that automatically processes and showcases 276 Roslyn Source Code Generator (RSCG) examples. The system transforms individual RSCG projects into structured documentation with code examples and cross-referenced content with a searchable website and code example exports. +The RSCG_Examples repository is a comprehensive documentation system that automatically processes and showcases 277 Roslyn Source Code Generator (RSCG) examples. The system transforms individual RSCG projects into structured documentation with code examples and cross-referenced content with a searchable website and code example exports. This system serves as both a learning resource for .NET developers interested in source generators and an automated pipeline for maintaining up-to-date documentation about the RSCG ecosystem -## Latest Update : 2026-07-03 => 03 July 2026 +## Latest Update : 2026-07-04 => 04 July 2026 If you want to see examples with code, please click ***[List V2](https://ignatandrei.github.io/RSCG_Examples/v2/docs/List-of-RSCG)*** @@ -24,8 +24,30 @@ If you want to be notified each time I add a new RSCG example , please click htt ## Content -Those are the 276 Roslyn Source Code Generators that I have tested you can see and download source code example. +Those are the 277 Roslyn Source Code Generators that I have tested you can see and download source code example. ( including 16 from Microsoft ) +### 277. [Bennewitz.Ninja.AutoVersioning](https://ignatandrei.github.io/RSCG_Examples/v2/docs/Bennewitz.Ninja.AutoVersioning) , in the [EnhancementProject](https://ignatandrei.github.io/RSCG_Examples/v2/docs/rscg-examples#enhancementproject) category + +Generated on : 2026-07-04 => 04 July 2026 + +
+ Expand + + + +Author: Brian Bennewitz + +Assembly info incremental source generator. + +Nuget: [https://www.nuget.org/packages/Bennewitz.Ninja.AutoVersioning/](https://www.nuget.org/packages/Bennewitz.Ninja.AutoVersioning/) + + +Link: [https://ignatandrei.github.io/RSCG_Examples/v2/docs/Bennewitz.Ninja.AutoVersioning](https://ignatandrei.github.io/RSCG_Examples/v2/docs/Bennewitz.Ninja.AutoVersioning) + +Source: [https://github.com/JanusMael/Bennewitz.Ninja.AutoVersioning](https://github.com/JanusMael/Bennewitz.Ninja.AutoVersioning) + +
+ ### 276. [TinyBDD.MSTest](https://ignatandrei.github.io/RSCG_Examples/v2/docs/TinyBDD.MSTest) , in the [Tests](https://ignatandrei.github.io/RSCG_Examples/v2/docs/rscg-examples#tests) category Generated on : 2026-07-03 => 03 July 2026 diff --git a/later.md b/later.md index 7d3884886..736db985d 100644 --- a/later.md +++ b/later.md @@ -1,6 +1,6 @@ # Just later -## Latest Update : 2026-07-03 => 03 July 2026 +## Latest Update : 2026-07-04 => 04 July 2026 diff --git a/v2/.tours/Bennewitz.Ninja.AutoVersioning.tour b/v2/.tours/Bennewitz.Ninja.AutoVersioning.tour new file mode 100644 index 000000000..7cce7429b --- /dev/null +++ b/v2/.tours/Bennewitz.Ninja.AutoVersioning.tour @@ -0,0 +1,36 @@ + +{ + "$schema": "https://aka.ms/codetour-schema", + "title": "Bennewitz.Ninja.AutoVersioning", + "steps": + [ + { + "file": "rscg_examples/Bennewitz.Ninja.AutoVersioning/src/InfoPrj/InfoPrj.csproj", + "description": "First, we add Nuget [Bennewitz.Ninja.AutoVersioning](https://www.nuget.org/packages/Bennewitz.Ninja.AutoVersioning/) in csproj ", + "pattern": "Bennewitz.Ninja.AutoVersioning" + } + + ,{ + "file": "rscg_examples/Bennewitz.Ninja.AutoVersioning/src/InfoPrj/Program.cs", + "description": "File Program.cs \r\n>> dotnet run --project rscg_examples/Bennewitz.Ninja.AutoVersioning/src/InfoPrj/InfoPrj.csproj ", + "pattern": "this is the code" + } + + + ,{ + "file": "rscg_examples/Bennewitz.Ninja.AutoVersioning/src/InfoPrj/obj/GX/Bennewitz.Ninja.AutoVersioning.SourceGenerators/Bennewitz.Ninja.AutoVersioning.SourceGenerators.AssemblyInfoGenerator/DirectoryBuildInfo.g.cs", + "description": "Generated File 2 from 2 : DirectoryBuildInfo.g.cs ", + "line": 1 + } + + ,{ + "file": "rscg_examples/Bennewitz.Ninja.AutoVersioning/src/InfoPrj/obj/GX/Bennewitz.Ninja.AutoVersioning.SourceGenerators/Bennewitz.Ninja.AutoVersioning.SourceGenerators.AssemblyInfoGenerator/AutoVersionedAssemblyInfo.g.cs", + "description": "Generated File 1 from 2 : AutoVersionedAssemblyInfo.g.cs ", + "line": 1 + } + + ], + + "ref": "main" + +} \ No newline at end of file diff --git a/v2/Generator/MultiGeneratorV2.cs b/v2/Generator/MultiGeneratorV2.cs index 35e0de32f..644724680 100644 --- a/v2/Generator/MultiGeneratorV2.cs +++ b/v2/Generator/MultiGeneratorV2.cs @@ -118,6 +118,9 @@ public string[] SourceNoRSCG() if (File.Exists(nameFile)) { var text=await File.ReadAllTextAsync(nameFile); + text = text.Replace("(Directory.Build.props.template", $"({d.Generator!.Source}/Directory.Build.props.template"); + text = text.Replace("(Build.ps1.template", $"({d.Generator!.Source}/Build.ps1.template"); + text = text.Replace("(Build.sh.template", $"({d.Generator!.Source}/Build.sh.template"); text = text.Replace("(examples/", $"({d.Generator!.Source}/examples/"); text = text.Replace("(tests/", $"({d.Generator!.Source}/tests/"); diff --git a/v2/Generator/all.csv b/v2/Generator/all.csv index d801233b3..df9f2acc0 100644 --- a/v2/Generator/all.csv +++ b/v2/Generator/all.csv @@ -275,3 +275,4 @@ Nr,Key,Source,Category 274,Dirge, https://github.com/IkuzakIkuzok/Dirge,Disposer 275,Porticle.Enumly, https://github.com/Machibuse/Porticle.Enumly,Enum 276,TinyBDD.MSTest, https://github.com/JerrettDavis/TinyBDD,Tests +277,Bennewitz.Ninja.AutoVersioning, https://github.com/JanusMael/Bennewitz.Ninja.AutoVersioning,EnhancementProject diff --git a/v2/RSCGExamplesData/GeneratorDataRec.json b/v2/RSCGExamplesData/GeneratorDataRec.json index f412f54f8..73af9bf9f 100644 --- a/v2/RSCGExamplesData/GeneratorDataRec.json +++ b/v2/RSCGExamplesData/GeneratorDataRec.json @@ -1672,5 +1672,11 @@ "Category": 13, "dtStart": "2026-07-03T00:00:00", "show": true + }, + { + "ID":"Bennewitz.Ninja.AutoVersioning", + "Category": 1, + "dtStart": "2026-07-04T00:00:00", + "show": true } ] \ No newline at end of file diff --git a/v2/rscg_examples/Bennewitz.Ninja.AutoVersioning/description.json b/v2/rscg_examples/Bennewitz.Ninja.AutoVersioning/description.json new file mode 100644 index 000000000..a464d7605 --- /dev/null +++ b/v2/rscg_examples/Bennewitz.Ninja.AutoVersioning/description.json @@ -0,0 +1,22 @@ +{ + "generator":{ + "name":"Bennewitz.Ninja.AutoVersioning", + "nuget":[ + "https://www.nuget.org/packages/Bennewitz.Ninja.AutoVersioning/" + ], + "link":"https://github.com/JanusMael/Bennewitz.Ninja.AutoVersioning", + "author":"Brian Bennewitz", + "source":"https://github.com/JanusMael/Bennewitz.Ninja.AutoVersioning" + }, + "data":{ + "goodFor":["Generating build version numbers for .NET projects"], + "csprojDemo":"InfoPrj.csproj", + "csFiles":["Program.cs"], + "excludeDirectoryGenerated":[""], + "includeAdditionalFiles":[""] + }, + "links":{ + "blog":"", + "video":"" + } +} \ No newline at end of file diff --git a/v2/rscg_examples/Bennewitz.Ninja.AutoVersioning/nuget.txt b/v2/rscg_examples/Bennewitz.Ninja.AutoVersioning/nuget.txt new file mode 100644 index 000000000..b6931cdad --- /dev/null +++ b/v2/rscg_examples/Bennewitz.Ninja.AutoVersioning/nuget.txt @@ -0,0 +1 @@ +Assembly info incremental source generator. \ No newline at end of file diff --git a/v2/rscg_examples/Bennewitz.Ninja.AutoVersioning/readme.txt b/v2/rscg_examples/Bennewitz.Ninja.AutoVersioning/readme.txt new file mode 100644 index 000000000..e0ba900fd --- /dev/null +++ b/v2/rscg_examples/Bennewitz.Ninja.AutoVersioning/readme.txt @@ -0,0 +1,163 @@ +# Bennewitz.Ninja.AutoVersioning + +A [Roslyn incremental source generator](https://learn.microsoft.com/en-us/dotnet/csharp/roslyn-sdk/source-generators-overview) that injects assembly metadata attributes and build-time constants into .NET projects at compile time — no `AssemblyInfo.cs`, no disk writes, full IDE caching. + +[![NuGet](https://img.shields.io/nuget/v/Bennewitz.Ninja.AutoVersioning.svg)](https://www.nuget.org/packages/Bennewitz.Ninja.AutoVersioning) +[![CI](https://github.com/JanusMael/Bennewitz.Ninja.AutoVersioning/actions/workflows/ci.yml/badge.svg)](https://github.com/JanusMael/Bennewitz.Ninja.AutoVersioning/actions/workflows/ci.yml) + +## Requirements + +.NET SDK 6.0 or later (requires Roslyn 4.0+ for `IIncrementalGenerator` support). The consuming project may target any framework — `.NET Framework 4.x`, `.NET Standard`, `.NET 6+`, etc. + +## Quick Start + +**1. Add the package:** + +```xml + +``` + +**2. Enable the generator** in your root `Directory.Build.props` (or any `.props` / `.csproj` imported by your build): + +```xml + + true + YourCompany + YourProduct + + + $(GITHUB_SHA) + $(GITHUB_ACTIONS) + $(MY_VERSION_VAR) + +``` + +> **Note:** The package's auto-imported `Build.props` automatically suppresses the 8 SDK-generated attributes that conflict with this generator (e.g. `AssemblyVersion`, `AssemblyCopyright`). It uses granular per-attribute suppressions rather than `false`, which means `InternalsVisibleTo` and all other SDK-generated attributes continue to work normally. Do **not** add `false` yourself — it will break `InternalsVisibleTo`. + +A ready-to-use template is available at [`Directory.Build.props.template`](Directory.Build.props.template). + +**3. Build.** The generator runs automatically — no further setup needed. + +> **Tip:** View the generated files in your IDE under `Dependencies → Analyzers → *SourceGenerators`. + +--- + +## Generated Output + +Given a build on 2026-04-29 at 14:35 UTC for company `Acme Corp`, product `Acme App`, commit `abc1234def`, and public version `3.1.0`: + +### `AutoVersionedAssemblyInfo.g.cs` + +```csharp +using System.Reflection; +using System.Runtime.CompilerServices; + +[assembly: AssemblyDescription("Assembly Version: 2026.2.429.1435")] +[assembly: AssemblyConfiguration("Release")] +[assembly: AssemblyCompany("Acme Corp")] +[assembly: AssemblyProduct("Acme App v2026.2.429.1435")] +[assembly: AssemblyCopyright("Copyright 2026 [Release]")] +[assembly: AssemblyVersion("2026.2.429.1435")] +[assembly: AssemblyFileVersion("2026.2.429.1435")] +[assembly: AssemblyInformationalVersion("Commit♥: abc1234def")] +[assembly: AssemblyMetadata("CommitSha", "abc1234def")] +[assembly: AssemblyMetadata("GITHUB_SHA", "abc1234def")] +[assembly: AssemblyMetadata("PublicVersion", "3.1.0")] +``` + +### `DirectoryBuildInfo.g.cs` + +```csharp +// +namespace Bennewitz.Ninja.AutoVersioning +{ + /// Build-time constants generated by the source generator. + public static class DirectoryBuildInfo + { + public const string BuildRelease = "Version 2026.2.429.1435 [built 4/29/2026 2:35:00 PM (UTC)]"; + } +} +``` + +Use `DirectoryBuildInfo.BuildRelease` wherever you need the build version at runtime — error trackers, log enrichment, health endpoints — without reading environment variables. + +--- + +## Configuration Reference + +| MSBuild Property | Description | Required | +|---|---|---| +| `GenerateAutoVersionedAssemblyInfo` | Set to `true` to enable the generator | **Yes** | +| `AssemblyCompany` | Value for `[assembly: AssemblyCompany(...)]` | **Yes** | +| `AssemblyProduct` | Value for `[assembly: AssemblyProduct(...)]` | **Yes** | +| `CopyrightHolder` | Name shown in the copyright attribute — defaults to `AssemblyCompany` if omitted | No | +| `CommitSha` | Git commit SHA | No | +| `IsContinuousIntegration` | `true` on CI runs | No | +| `PublicVersion` | Your app's public-facing version string | No | +| `Configuration` | `Debug` / `Release` — set automatically by MSBuild | Auto | +| `BuildTimestamp` | Build start time in `yyyyMMddHHmmss` format — captured automatically at MSBuild evaluation time (before any project compiles), ensuring a consistent version across all projects in a multi-project solution build. Override on CI for an exact guarantee: `dotnet build -p:BuildTimestamp=$(date +%Y%m%d%H%M%S)` | Auto | + +### CI Provider Mappings + +| Provider | Commit SHA | CI flag | +|---|---|---| +| GitHub Actions | `$(GITHUB_SHA)` | `$(GITHUB_ACTIONS)` | +| GitLab CI | `$(CI_COMMIT_SHA)` | `$(GITLAB_CI)` | +| Bitbucket Pipelines | `$(BITBUCKET_COMMIT)` | `$(CI)` | + +### Version Format + +The generator uses **CalVer**: `YEAR.QUARTER.MMDD.HHmm` + +| Part | Example | Meaning | +|---|---|---| +| Major | `2026` | Calendar year | +| Minor | `2` | Quarter (1–4) | +| Build | `429` | Month + day (`MMdd` as integer) | +| Revision | `1435` | Hour + minute (`HHmm` as integer) | + +--- + +## How It Works + +This is a modern C# `IIncrementalGenerator`. Compared to legacy `ISourceGenerator` approaches it: + +- Runs **entirely in-memory** — zero files written to disk +- Uses the **Roslyn caching pipeline** — the IDE (Rider, Visual Studio) only re-runs the generator when its inputs change, eliminating background compilation loops +- Reads MSBuild properties **via `AnalyzerConfigOptionsProvider`** — safe, no direct environment variable reads + +The package auto-imports `Build.props` via NuGet, which declares `CompilerVisibleProperty` items and suppresses the SDK's default `AssemblyInfo` generation (preventing CS0579 duplicate attribute errors when the generator is enabled). + +### Timestamp Consistency in Multi-Project Builds + +`BuildTimestamp` keeps the version consistent across every project in a solution build. See [`docs/MultiProjectBuildTimestamps.md`](docs/MultiProjectBuildTimestamps.md) for how it works and what alternative approaches were considered. + +> **TL;DR:** For CI, or any local build where an exact guarantee matters more than convenience, use `-p:BuildTimestamp=...` to fix the value explicitly instead of relying on evaluation-time capture. Ready-to-use wrappers are available at [`Build.ps1.template`](Build.ps1.template) (Windows/PowerShell 7+) and [`Build.sh.template`](Build.sh.template) (Linux/macOS/bash). + +### Diagnostics + +| ID | Severity | Description | +|---|---|---| +| `BAUTOVERSIONING00` | Warning | Generator is installed but `GenerateAutoVersionedAssemblyInfo` is not set to `true` (single-line signal) | +| `BAUTOVERSIONING01` | Warning | Generator threw an unexpected exception | +| `BAUTOVERSIONING02` | Error | `AssemblyCompany` is not configured | +| `BAUTOVERSIONING03` | Error | `AssemblyProduct` is not configured | +| `BAUTOVERSIONING04` | Warning | Multi-line setup snippet emitted alongside BAUTOVERSIONING00 — shows the required `Directory.Build.props` configuration | + +--- + +## Building Locally + +Requires PowerShell 7+ and the .NET SDK. + +```powershell +./Pack.ps1 +``` + +The script prompts for a version (defaults to CalVer `YYYY.Q.MMDD`) and produces `.nupkg` files in `packages/Debug/` and `packages/Release/`. + +--- + +## License + +MIT © 2026 Brian Bennewitz diff --git a/v2/rscg_examples/Bennewitz.Ninja.AutoVersioning/src/InfoPrj.slnx b/v2/rscg_examples/Bennewitz.Ninja.AutoVersioning/src/InfoPrj.slnx new file mode 100644 index 000000000..8059a92a1 --- /dev/null +++ b/v2/rscg_examples/Bennewitz.Ninja.AutoVersioning/src/InfoPrj.slnx @@ -0,0 +1,3 @@ + + + diff --git a/v2/rscg_examples/Bennewitz.Ninja.AutoVersioning/src/InfoPrj/InfoPrj.csproj b/v2/rscg_examples/Bennewitz.Ninja.AutoVersioning/src/InfoPrj/InfoPrj.csproj new file mode 100644 index 000000000..e9d6db399 --- /dev/null +++ b/v2/rscg_examples/Bennewitz.Ninja.AutoVersioning/src/InfoPrj/InfoPrj.csproj @@ -0,0 +1,49 @@ + + + + Exe + net10.0 + enable + enable + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + true + + false + false + false + false + false + false + false + false + + + AOM Company + Andrei Ignat Product + + + $(GITHUB_SHA) + $(GITHUB_ACTIONS) + $(MY_VERSION_VAR) + + + true + $(BaseIntermediateOutputPath)\GX + + + diff --git a/v2/rscg_examples/Bennewitz.Ninja.AutoVersioning/src/InfoPrj/Program.cs b/v2/rscg_examples/Bennewitz.Ninja.AutoVersioning/src/InfoPrj/Program.cs new file mode 100644 index 000000000..daf2b705a --- /dev/null +++ b/v2/rscg_examples/Bennewitz.Ninja.AutoVersioning/src/InfoPrj/Program.cs @@ -0,0 +1,4 @@ +using Bennewitz.Ninja.AutoVersioning; + +Console.WriteLine("Hello, World!"); +Console.WriteLine(DirectoryBuildInfo.BuildRelease); \ No newline at end of file diff --git a/v2/rscg_examples/Bennewitz.Ninja.AutoVersioning/video.json b/v2/rscg_examples/Bennewitz.Ninja.AutoVersioning/video.json new file mode 100644 index 000000000..7eea42a1a --- /dev/null +++ b/v2/rscg_examples/Bennewitz.Ninja.AutoVersioning/video.json @@ -0,0 +1,39 @@ +{ + "scriptName": "Bennewitz.Ninja.AutoVersioning", + "steps": +[ + {"typeStep":"exec","arg":"clipchamp.exe launch"}, + {"typeStep":"text","arg": "Welcome to Roslyn Examples"}, + {"typeStep":"text","arg":"If you want to see more examples , see List Of RSCG"}, + {"typeStep":"browser","arg":"https://ignatandrei.github.io/RSCG_Examples/v2/docs/List-of-RSCG"}, + {"typeStep":"text","arg": "My name is Andrei Ignat and I am deeply fond of Roslyn Source Code Generator. "}, + +{"typeStep":"text","arg": "Today I will present Bennewitz.Ninja.AutoVersioning . Generating build version numbers for .NET projects ."}, +{"typeStep":"browser","arg":"https://www.nuget.org/packages/Bennewitz.Ninja.AutoVersioning/"}, +{"typeStep":"text","arg": "The whole example is here"}, +{"typeStep":"browser","arg":"https://ignatandrei.github.io/RSCG_Examples/v2/docs/Bennewitz.Ninja.AutoVersioning"}, +{"typeStep":"text","arg": "You can download the code from here"}, +{"typeStep":"browser","arg":"https://ignatandrei.github.io/RSCG_Examples/v2/docs/Bennewitz.Ninja.AutoVersioning#download-example-net--c-"}, +{"typeStep":"text","arg":"Here is the code downloaded "}, +{"typeStep":"exec","arg":"explorer.exe /select,D:\\gth\\RSCG_Examples\\v2\\Generator.sln"}, +{"typeStep":"text","arg": "So , let's start the project with Visual Studio Code "}, +{"typeStep":"stepvscode","arg": "-n D:\\gth\\RSCG_Examples\\v2"}, + +{"typeStep":"text","arg": "To use it ,you will put the Nuget Bennewitz.Ninja.AutoVersioning into the csproj "}, + +{"typeStep":"stepvscode","arg": "-r -g D:\\gth\\RSCG_Examples\\v2\\rscg_examples\\Bennewitz.Ninja.AutoVersioning\\src\\InfoPrj\\InfoPrj.csproj"}, + +{"typeStep":"text","arg": "And now I will show you an example of using Bennewitz.Ninja.AutoVersioning"}, + +{"typeStep":"hide","arg": "now execute the tour in VSCode"}, +{"typeStep":"tour", "arg": "src/.tours/"}, +{"typeStep":"text","arg":" And I will execute the project"}, +{"typeStep":"showproj", "arg":"InfoPrj.csproj"}, +{"typeStep":"text","arg":" This concludes the project"}, +{"typeStep":"waitseconds","arg":"30"}, +{"typeStep":"text","arg": "Remember, you can download the code from here"}, +{"typeStep":"browser","arg":"https://ignatandrei.github.io/RSCG_Examples/v2/docs/Bennewitz.Ninja.AutoVersioning#download-example-net--c-", +SpeakTest=" "}, +{"typeStep":"waitseconds","arg":"30"}, +] +} diff --git a/v2/rscg_examples_site/docs/Authors/Brian_Bennewitz.md b/v2/rscg_examples_site/docs/Authors/Brian_Bennewitz.md new file mode 100644 index 000000000..300c2f60e --- /dev/null +++ b/v2/rscg_examples_site/docs/Authors/Brian_Bennewitz.md @@ -0,0 +1,7 @@ +# Author : Brian Bennewitz + +Number RSCG: 1 + + + 1 [Bennewitz.Ninja.AutoVersioning](/docs/Bennewitz.Ninja.AutoVersioning) [![Nuget](https://img.shields.io/nuget/dt/Bennewitz.Ninja.AutoVersioning?label=Bennewitz.Ninja.AutoVersioning)](https://www.nuget.org/packages/Bennewitz.Ninja.AutoVersioning/) ![GitHub Repo stars](https://img.shields.io/github/stars/JanusMael/Bennewitz.Ninja.AutoVersioning?style=social) 2026-07-04 + diff --git a/v2/rscg_examples_site/docs/Categories/EnhancementProject.md b/v2/rscg_examples_site/docs/Categories/EnhancementProject.md index 333c4bfdb..2b7bb5f1a 100644 --- a/v2/rscg_examples_site/docs/Categories/EnhancementProject.md +++ b/v2/rscg_examples_site/docs/Categories/EnhancementProject.md @@ -1,6 +1,6 @@

EnhancementProject

-Number RSCG: 21 +Number RSCG: 22 1 [AssemblyMetadata](/docs/AssemblyMetadata) [![Nuget](https://img.shields.io/nuget/dt/AssemblyMetadata?label=AssemblyMetadata)](https://www.nuget.org/packages/AssemblyMetadata/) ![GitHub Repo stars](https://img.shields.io/github/stars/BenjaminAbt/AssemblyMetadata?style=social) 2026-04-02 @@ -12,35 +12,37 @@ Number RSCG: 21 5 [AutoSpectre](/docs/AutoSpectre) [![Nuget](https://img.shields.io/nuget/dt/AutoSpectre.SourceGeneration?label=AutoSpectre.SourceGeneration)](https://www.nuget.org/packages/AutoSpectre.SourceGeneration)[![Nuget](https://img.shields.io/nuget/dt/AutoSpectre?label=AutoSpectre)](https://www.nuget.org/packages/AutoSpectre) ![GitHub Repo stars](https://img.shields.io/github/stars/jeppevammenkristensen/auto-spectre?style=social) 2024-02-24 - 6 [BuildInfo](/docs/BuildInfo) [![Nuget](https://img.shields.io/nuget/dt/BuildInfo?label=BuildInfo)](https://www.nuget.org/packages/BuildInfo/) ![GitHub Repo stars](https://img.shields.io/github/stars/linkdotnet/BuildInformation?style=social) 2024-01-20 + 6 [Bennewitz.Ninja.AutoVersioning](/docs/Bennewitz.Ninja.AutoVersioning) [![Nuget](https://img.shields.io/nuget/dt/Bennewitz.Ninja.AutoVersioning?label=Bennewitz.Ninja.AutoVersioning)](https://www.nuget.org/packages/Bennewitz.Ninja.AutoVersioning/) ![GitHub Repo stars](https://img.shields.io/github/stars/JanusMael/Bennewitz.Ninja.AutoVersioning?style=social) 2026-07-04 - 7 [Credfeto.Version.Information.Generator](/docs/Credfeto.Version.Information.Generator) [![Nuget](https://img.shields.io/nuget/dt/Credfeto.Version.Information.Generator?label=Credfeto.Version.Information.Generator)](https://www.nuget.org/packages/Credfeto.Version.Information.Generator/) ![GitHub Repo stars](https://img.shields.io/github/stars/credfeto/credfeto-version-constants-generator?style=social) 2024-11-05 + 7 [BuildInfo](/docs/BuildInfo) [![Nuget](https://img.shields.io/nuget/dt/BuildInfo?label=BuildInfo)](https://www.nuget.org/packages/BuildInfo/) ![GitHub Repo stars](https://img.shields.io/github/stars/linkdotnet/BuildInformation?style=social) 2024-01-20 - 8 [Larcanum.GitInfo](/docs/Larcanum.GitInfo) [![Nuget](https://img.shields.io/nuget/dt/Larcanum.GitInfo?label=Larcanum.GitInfo)](https://www.nuget.org/packages/Larcanum.GitInfo/) ![GitHub Repo stars](https://img.shields.io/github/stars/lord-executor/Larcanum.GitInfo?style=social) 2025-01-17 + 8 [Credfeto.Version.Information.Generator](/docs/Credfeto.Version.Information.Generator) [![Nuget](https://img.shields.io/nuget/dt/Credfeto.Version.Information.Generator?label=Credfeto.Version.Information.Generator)](https://www.nuget.org/packages/Credfeto.Version.Information.Generator/) ![GitHub Repo stars](https://img.shields.io/github/stars/credfeto/credfeto-version-constants-generator?style=social) 2024-11-05 - 9 [LinqGen.Generator](/docs/LinqGen.Generator) [![Nuget](https://img.shields.io/nuget/dt/LinqGen.Generator?label=LinqGen.Generator)](https://www.nuget.org/packages/LinqGen.Generator/)[![Nuget](https://img.shields.io/nuget/dt/LinqGen?label=LinqGen)](https://www.nuget.org/packages/LinqGen/) ![GitHub Repo stars](https://img.shields.io/github/stars/cathei/LinqGen?style=social) 2024-03-04 + 9 [Larcanum.GitInfo](/docs/Larcanum.GitInfo) [![Nuget](https://img.shields.io/nuget/dt/Larcanum.GitInfo?label=Larcanum.GitInfo)](https://www.nuget.org/packages/Larcanum.GitInfo/) ![GitHub Repo stars](https://img.shields.io/github/stars/lord-executor/Larcanum.GitInfo?style=social) 2025-01-17 - 10 [Pekspro.BuildInformationGenerator](/docs/Pekspro.BuildInformationGenerator) [![Nuget](https://img.shields.io/nuget/dt/Pekspro.BuildInformationGenerator?label=Pekspro.BuildInformationGenerator)](https://www.nuget.org/packages/Pekspro.BuildInformationGenerator/) ![GitHub Repo stars](https://img.shields.io/github/stars/pekspro/BuildInformationGenerator?style=social) 2024-07-19 + 10 [LinqGen.Generator](/docs/LinqGen.Generator) [![Nuget](https://img.shields.io/nuget/dt/LinqGen.Generator?label=LinqGen.Generator)](https://www.nuget.org/packages/LinqGen.Generator/)[![Nuget](https://img.shields.io/nuget/dt/LinqGen?label=LinqGen)](https://www.nuget.org/packages/LinqGen/) ![GitHub Repo stars](https://img.shields.io/github/stars/cathei/LinqGen?style=social) 2024-03-04 - 11 [PlantUmlClassDiagramGenerator](/docs/PlantUmlClassDiagramGenerator) [![Nuget](https://img.shields.io/nuget/dt/PlantUmlClassDiagramGenerator.SourceGenerator?label=PlantUmlClassDiagramGenerator.SourceGenerator)](https://www.nuget.org/packages/PlantUmlClassDiagramGenerator.SourceGenerator/)[![Nuget](https://img.shields.io/nuget/dt/PlantUmlClassDiagramGenerator.Attributes?label=PlantUmlClassDiagramGenerator.Attributes)](https://www.nuget.org/packages/PlantUmlClassDiagramGenerator.Attributes/) ![GitHub Repo stars](https://img.shields.io/github/stars/pierre3/PlantUmlClassDiagramGenerator?style=social) 2024-02-20 + 11 [Pekspro.BuildInformationGenerator](/docs/Pekspro.BuildInformationGenerator) [![Nuget](https://img.shields.io/nuget/dt/Pekspro.BuildInformationGenerator?label=Pekspro.BuildInformationGenerator)](https://www.nuget.org/packages/Pekspro.BuildInformationGenerator/) ![GitHub Repo stars](https://img.shields.io/github/stars/pekspro/BuildInformationGenerator?style=social) 2024-07-19 - 12 [RSCG_AMS](/docs/RSCG_AMS) [![Nuget](https://img.shields.io/nuget/dt/RSCG_AMS?label=RSCG_AMS)](https://www.nuget.org/packages/RSCG_AMS/) ![GitHub Repo stars](https://img.shields.io/github/stars/ignatandrei/RSCG_AMS?style=social) 2023-04-16 + 12 [PlantUmlClassDiagramGenerator](/docs/PlantUmlClassDiagramGenerator) [![Nuget](https://img.shields.io/nuget/dt/PlantUmlClassDiagramGenerator.SourceGenerator?label=PlantUmlClassDiagramGenerator.SourceGenerator)](https://www.nuget.org/packages/PlantUmlClassDiagramGenerator.SourceGenerator/)[![Nuget](https://img.shields.io/nuget/dt/PlantUmlClassDiagramGenerator.Attributes?label=PlantUmlClassDiagramGenerator.Attributes)](https://www.nuget.org/packages/PlantUmlClassDiagramGenerator.Attributes/) ![GitHub Repo stars](https://img.shields.io/github/stars/pierre3/PlantUmlClassDiagramGenerator?style=social) 2024-02-20 - 13 [RSCG_ExportDiagram](/docs/RSCG_ExportDiagram) [![Nuget](https://img.shields.io/nuget/dt/RSCG_ExportDiagram?label=RSCG_ExportDiagram)](https://github.com/ignatandrei/RSCG_ExportDiagram) ![GitHub Repo stars](https://img.shields.io/github/stars/ignatandrei/RSCG_ExportDiagram?style=social) 2024-08-01 + 13 [RSCG_AMS](/docs/RSCG_AMS) [![Nuget](https://img.shields.io/nuget/dt/RSCG_AMS?label=RSCG_AMS)](https://www.nuget.org/packages/RSCG_AMS/) ![GitHub Repo stars](https://img.shields.io/github/stars/ignatandrei/RSCG_AMS?style=social) 2023-04-16 - 14 [RSCG_FunctionsWithDI](/docs/RSCG_FunctionsWithDI) [![Nuget](https://img.shields.io/nuget/dt/RSCG_FunctionsWithDI?label=RSCG_FunctionsWithDI)](https://www.nuget.org/packages/RSCG_FunctionsWithDI/) ![GitHub Repo stars](https://img.shields.io/github/stars/ignatandrei/functionsdi?style=social) 2023-04-16 + 14 [RSCG_ExportDiagram](/docs/RSCG_ExportDiagram) [![Nuget](https://img.shields.io/nuget/dt/RSCG_ExportDiagram?label=RSCG_ExportDiagram)](https://github.com/ignatandrei/RSCG_ExportDiagram) ![GitHub Repo stars](https://img.shields.io/github/stars/ignatandrei/RSCG_ExportDiagram?style=social) 2024-08-01 - 15 [RSCG_NameGenerator](/docs/RSCG_NameGenerator) [![Nuget](https://img.shields.io/nuget/dt/RSCG_NameGenerator?label=RSCG_NameGenerator)](https://www.nuget.org/packages/RSCG_NameGenerator/) ![GitHub Repo stars](https://img.shields.io/github/stars/ignatandrei/NameGenerator?style=social) 2024-08-25 + 15 [RSCG_FunctionsWithDI](/docs/RSCG_FunctionsWithDI) [![Nuget](https://img.shields.io/nuget/dt/RSCG_FunctionsWithDI?label=RSCG_FunctionsWithDI)](https://www.nuget.org/packages/RSCG_FunctionsWithDI/) ![GitHub Repo stars](https://img.shields.io/github/stars/ignatandrei/functionsdi?style=social) 2023-04-16 - 16 [RSCG_TimeBombComment](/docs/RSCG_TimeBombComment) [![Nuget](https://img.shields.io/nuget/dt/RSCG_TimeBombComment?label=RSCG_TimeBombComment)](https://www.nuget.org/packages/RSCG_TimeBombComment/) ![GitHub Repo stars](https://img.shields.io/github/stars/ignatandrei/RSCG_TimeBombComment?style=social) 2023-04-16 + 16 [RSCG_NameGenerator](/docs/RSCG_NameGenerator) [![Nuget](https://img.shields.io/nuget/dt/RSCG_NameGenerator?label=RSCG_NameGenerator)](https://www.nuget.org/packages/RSCG_NameGenerator/) ![GitHub Repo stars](https://img.shields.io/github/stars/ignatandrei/NameGenerator?style=social) 2024-08-25 - 17 [RSCG_Wait](/docs/RSCG_Wait) [![Nuget](https://img.shields.io/nuget/dt/RSCG_WaitAndOptions?label=RSCG_WaitAndOptions)](https://www.nuget.org/packages/RSCG_WaitAndOptions/) ![GitHub Repo stars](https://img.shields.io/github/stars/ignatandrei/RSCG_WaitAndOptions?style=social) 2024-02-21 + 17 [RSCG_TimeBombComment](/docs/RSCG_TimeBombComment) [![Nuget](https://img.shields.io/nuget/dt/RSCG_TimeBombComment?label=RSCG_TimeBombComment)](https://www.nuget.org/packages/RSCG_TimeBombComment/) ![GitHub Repo stars](https://img.shields.io/github/stars/ignatandrei/RSCG_TimeBombComment?style=social) 2023-04-16 - 18 [ShadowWriterProjectInfo](/docs/ShadowWriterProjectInfo) [![Nuget](https://img.shields.io/nuget/dt/ShadowWriter?label=ShadowWriter)](https://www.nuget.org/packages/ShadowWriter/) ![GitHub Repo stars](https://img.shields.io/github/stars/StefanStolz/ShadowWriter?style=social) 2025-07-27 + 18 [RSCG_Wait](/docs/RSCG_Wait) [![Nuget](https://img.shields.io/nuget/dt/RSCG_WaitAndOptions?label=RSCG_WaitAndOptions)](https://www.nuget.org/packages/RSCG_WaitAndOptions/) ![GitHub Repo stars](https://img.shields.io/github/stars/ignatandrei/RSCG_WaitAndOptions?style=social) 2024-02-21 - 19 [ThisAssembly](/docs/ThisAssembly) [![Nuget](https://img.shields.io/nuget/dt/ThisAssembly?label=ThisAssembly)](https://www.nuget.org/packages/ThisAssembly) ![GitHub Repo stars](https://img.shields.io/github/stars/devlooped/ThisAssembly?style=social) 2023-04-16 + 19 [ShadowWriterProjectInfo](/docs/ShadowWriterProjectInfo) [![Nuget](https://img.shields.io/nuget/dt/ShadowWriter?label=ShadowWriter)](https://www.nuget.org/packages/ShadowWriter/) ![GitHub Repo stars](https://img.shields.io/github/stars/StefanStolz/ShadowWriter?style=social) 2025-07-27 - 20 [ThisAssembly.Constants](/docs/ThisAssembly.Constants) [![Nuget](https://img.shields.io/nuget/dt/ThisAssembly.Constants?label=ThisAssembly.Constants)](https://www.nuget.org/packages/ThisAssembly.Constants/) ![GitHub Repo stars](https://img.shields.io/github/stars/devlooped/ThisAssembly?style=social) 2024-07-18 + 20 [ThisAssembly](/docs/ThisAssembly) [![Nuget](https://img.shields.io/nuget/dt/ThisAssembly?label=ThisAssembly)](https://www.nuget.org/packages/ThisAssembly) ![GitHub Repo stars](https://img.shields.io/github/stars/devlooped/ThisAssembly?style=social) 2023-04-16 - 21 [ThisAssembly.Metadata](/docs/ThisAssembly.Metadata) [![Nuget](https://img.shields.io/nuget/dt/ThisAssembly.Metadata?label=ThisAssembly.Metadata)](https://www.nuget.org/packages/ThisAssembly.Metadata/) ![GitHub Repo stars](https://img.shields.io/github/stars/devlooped/ThisAssembly?style=social) 2024-07-20 + 21 [ThisAssembly.Constants](/docs/ThisAssembly.Constants) [![Nuget](https://img.shields.io/nuget/dt/ThisAssembly.Constants?label=ThisAssembly.Constants)](https://www.nuget.org/packages/ThisAssembly.Constants/) ![GitHub Repo stars](https://img.shields.io/github/stars/devlooped/ThisAssembly?style=social) 2024-07-18 + + 22 [ThisAssembly.Metadata](/docs/ThisAssembly.Metadata) [![Nuget](https://img.shields.io/nuget/dt/ThisAssembly.Metadata?label=ThisAssembly.Metadata)](https://www.nuget.org/packages/ThisAssembly.Metadata/) ![GitHub Repo stars](https://img.shields.io/github/stars/devlooped/ThisAssembly?style=social) 2024-07-20 \ No newline at end of file diff --git a/v2/rscg_examples_site/docs/Categories/_PrimitiveEnhancementProject.mdx b/v2/rscg_examples_site/docs/Categories/_PrimitiveEnhancementProject.mdx index 2f0102445..8622833f9 100644 --- a/v2/rscg_examples_site/docs/Categories/_PrimitiveEnhancementProject.mdx +++ b/v2/rscg_examples_site/docs/Categories/_PrimitiveEnhancementProject.mdx @@ -10,37 +10,39 @@ 5 [AutoSpectre](/docs/AutoSpectre) [![Nuget](https://img.shields.io/nuget/dt/AutoSpectre.SourceGeneration?label=AutoSpectre.SourceGeneration)](https://www.nuget.org/packages/AutoSpectre.SourceGeneration)[![Nuget](https://img.shields.io/nuget/dt/AutoSpectre?label=AutoSpectre)](https://www.nuget.org/packages/AutoSpectre) ![GitHub Repo stars](https://img.shields.io/github/stars/jeppevammenkristensen/auto-spectre?style=social) 2024-02-24 - 6 [BuildInfo](/docs/BuildInfo) [![Nuget](https://img.shields.io/nuget/dt/BuildInfo?label=BuildInfo)](https://www.nuget.org/packages/BuildInfo/) ![GitHub Repo stars](https://img.shields.io/github/stars/linkdotnet/BuildInformation?style=social) 2024-01-20 + 6 [Bennewitz.Ninja.AutoVersioning](/docs/Bennewitz.Ninja.AutoVersioning) [![Nuget](https://img.shields.io/nuget/dt/Bennewitz.Ninja.AutoVersioning?label=Bennewitz.Ninja.AutoVersioning)](https://www.nuget.org/packages/Bennewitz.Ninja.AutoVersioning/) ![GitHub Repo stars](https://img.shields.io/github/stars/JanusMael/Bennewitz.Ninja.AutoVersioning?style=social) 2026-07-04 - 7 [Credfeto.Version.Information.Generator](/docs/Credfeto.Version.Information.Generator) [![Nuget](https://img.shields.io/nuget/dt/Credfeto.Version.Information.Generator?label=Credfeto.Version.Information.Generator)](https://www.nuget.org/packages/Credfeto.Version.Information.Generator/) ![GitHub Repo stars](https://img.shields.io/github/stars/credfeto/credfeto-version-constants-generator?style=social) 2024-11-05 + 7 [BuildInfo](/docs/BuildInfo) [![Nuget](https://img.shields.io/nuget/dt/BuildInfo?label=BuildInfo)](https://www.nuget.org/packages/BuildInfo/) ![GitHub Repo stars](https://img.shields.io/github/stars/linkdotnet/BuildInformation?style=social) 2024-01-20 - 8 [Larcanum.GitInfo](/docs/Larcanum.GitInfo) [![Nuget](https://img.shields.io/nuget/dt/Larcanum.GitInfo?label=Larcanum.GitInfo)](https://www.nuget.org/packages/Larcanum.GitInfo/) ![GitHub Repo stars](https://img.shields.io/github/stars/lord-executor/Larcanum.GitInfo?style=social) 2025-01-17 + 8 [Credfeto.Version.Information.Generator](/docs/Credfeto.Version.Information.Generator) [![Nuget](https://img.shields.io/nuget/dt/Credfeto.Version.Information.Generator?label=Credfeto.Version.Information.Generator)](https://www.nuget.org/packages/Credfeto.Version.Information.Generator/) ![GitHub Repo stars](https://img.shields.io/github/stars/credfeto/credfeto-version-constants-generator?style=social) 2024-11-05 - 9 [LinqGen.Generator](/docs/LinqGen.Generator) [![Nuget](https://img.shields.io/nuget/dt/LinqGen.Generator?label=LinqGen.Generator)](https://www.nuget.org/packages/LinqGen.Generator/)[![Nuget](https://img.shields.io/nuget/dt/LinqGen?label=LinqGen)](https://www.nuget.org/packages/LinqGen/) ![GitHub Repo stars](https://img.shields.io/github/stars/cathei/LinqGen?style=social) 2024-03-04 + 9 [Larcanum.GitInfo](/docs/Larcanum.GitInfo) [![Nuget](https://img.shields.io/nuget/dt/Larcanum.GitInfo?label=Larcanum.GitInfo)](https://www.nuget.org/packages/Larcanum.GitInfo/) ![GitHub Repo stars](https://img.shields.io/github/stars/lord-executor/Larcanum.GitInfo?style=social) 2025-01-17 - 10 [Pekspro.BuildInformationGenerator](/docs/Pekspro.BuildInformationGenerator) [![Nuget](https://img.shields.io/nuget/dt/Pekspro.BuildInformationGenerator?label=Pekspro.BuildInformationGenerator)](https://www.nuget.org/packages/Pekspro.BuildInformationGenerator/) ![GitHub Repo stars](https://img.shields.io/github/stars/pekspro/BuildInformationGenerator?style=social) 2024-07-19 + 10 [LinqGen.Generator](/docs/LinqGen.Generator) [![Nuget](https://img.shields.io/nuget/dt/LinqGen.Generator?label=LinqGen.Generator)](https://www.nuget.org/packages/LinqGen.Generator/)[![Nuget](https://img.shields.io/nuget/dt/LinqGen?label=LinqGen)](https://www.nuget.org/packages/LinqGen/) ![GitHub Repo stars](https://img.shields.io/github/stars/cathei/LinqGen?style=social) 2024-03-04 - 11 [PlantUmlClassDiagramGenerator](/docs/PlantUmlClassDiagramGenerator) [![Nuget](https://img.shields.io/nuget/dt/PlantUmlClassDiagramGenerator.SourceGenerator?label=PlantUmlClassDiagramGenerator.SourceGenerator)](https://www.nuget.org/packages/PlantUmlClassDiagramGenerator.SourceGenerator/)[![Nuget](https://img.shields.io/nuget/dt/PlantUmlClassDiagramGenerator.Attributes?label=PlantUmlClassDiagramGenerator.Attributes)](https://www.nuget.org/packages/PlantUmlClassDiagramGenerator.Attributes/) ![GitHub Repo stars](https://img.shields.io/github/stars/pierre3/PlantUmlClassDiagramGenerator?style=social) 2024-02-20 + 11 [Pekspro.BuildInformationGenerator](/docs/Pekspro.BuildInformationGenerator) [![Nuget](https://img.shields.io/nuget/dt/Pekspro.BuildInformationGenerator?label=Pekspro.BuildInformationGenerator)](https://www.nuget.org/packages/Pekspro.BuildInformationGenerator/) ![GitHub Repo stars](https://img.shields.io/github/stars/pekspro/BuildInformationGenerator?style=social) 2024-07-19 - 12 [RSCG_AMS](/docs/RSCG_AMS) [![Nuget](https://img.shields.io/nuget/dt/RSCG_AMS?label=RSCG_AMS)](https://www.nuget.org/packages/RSCG_AMS/) ![GitHub Repo stars](https://img.shields.io/github/stars/ignatandrei/RSCG_AMS?style=social) 2023-04-16 + 12 [PlantUmlClassDiagramGenerator](/docs/PlantUmlClassDiagramGenerator) [![Nuget](https://img.shields.io/nuget/dt/PlantUmlClassDiagramGenerator.SourceGenerator?label=PlantUmlClassDiagramGenerator.SourceGenerator)](https://www.nuget.org/packages/PlantUmlClassDiagramGenerator.SourceGenerator/)[![Nuget](https://img.shields.io/nuget/dt/PlantUmlClassDiagramGenerator.Attributes?label=PlantUmlClassDiagramGenerator.Attributes)](https://www.nuget.org/packages/PlantUmlClassDiagramGenerator.Attributes/) ![GitHub Repo stars](https://img.shields.io/github/stars/pierre3/PlantUmlClassDiagramGenerator?style=social) 2024-02-20 - 13 [RSCG_ExportDiagram](/docs/RSCG_ExportDiagram) [![Nuget](https://img.shields.io/nuget/dt/RSCG_ExportDiagram?label=RSCG_ExportDiagram)](https://github.com/ignatandrei/RSCG_ExportDiagram) ![GitHub Repo stars](https://img.shields.io/github/stars/ignatandrei/RSCG_ExportDiagram?style=social) 2024-08-01 + 13 [RSCG_AMS](/docs/RSCG_AMS) [![Nuget](https://img.shields.io/nuget/dt/RSCG_AMS?label=RSCG_AMS)](https://www.nuget.org/packages/RSCG_AMS/) ![GitHub Repo stars](https://img.shields.io/github/stars/ignatandrei/RSCG_AMS?style=social) 2023-04-16 - 14 [RSCG_FunctionsWithDI](/docs/RSCG_FunctionsWithDI) [![Nuget](https://img.shields.io/nuget/dt/RSCG_FunctionsWithDI?label=RSCG_FunctionsWithDI)](https://www.nuget.org/packages/RSCG_FunctionsWithDI/) ![GitHub Repo stars](https://img.shields.io/github/stars/ignatandrei/functionsdi?style=social) 2023-04-16 + 14 [RSCG_ExportDiagram](/docs/RSCG_ExportDiagram) [![Nuget](https://img.shields.io/nuget/dt/RSCG_ExportDiagram?label=RSCG_ExportDiagram)](https://github.com/ignatandrei/RSCG_ExportDiagram) ![GitHub Repo stars](https://img.shields.io/github/stars/ignatandrei/RSCG_ExportDiagram?style=social) 2024-08-01 - 15 [RSCG_NameGenerator](/docs/RSCG_NameGenerator) [![Nuget](https://img.shields.io/nuget/dt/RSCG_NameGenerator?label=RSCG_NameGenerator)](https://www.nuget.org/packages/RSCG_NameGenerator/) ![GitHub Repo stars](https://img.shields.io/github/stars/ignatandrei/NameGenerator?style=social) 2024-08-25 + 15 [RSCG_FunctionsWithDI](/docs/RSCG_FunctionsWithDI) [![Nuget](https://img.shields.io/nuget/dt/RSCG_FunctionsWithDI?label=RSCG_FunctionsWithDI)](https://www.nuget.org/packages/RSCG_FunctionsWithDI/) ![GitHub Repo stars](https://img.shields.io/github/stars/ignatandrei/functionsdi?style=social) 2023-04-16 - 16 [RSCG_TimeBombComment](/docs/RSCG_TimeBombComment) [![Nuget](https://img.shields.io/nuget/dt/RSCG_TimeBombComment?label=RSCG_TimeBombComment)](https://www.nuget.org/packages/RSCG_TimeBombComment/) ![GitHub Repo stars](https://img.shields.io/github/stars/ignatandrei/RSCG_TimeBombComment?style=social) 2023-04-16 + 16 [RSCG_NameGenerator](/docs/RSCG_NameGenerator) [![Nuget](https://img.shields.io/nuget/dt/RSCG_NameGenerator?label=RSCG_NameGenerator)](https://www.nuget.org/packages/RSCG_NameGenerator/) ![GitHub Repo stars](https://img.shields.io/github/stars/ignatandrei/NameGenerator?style=social) 2024-08-25 - 17 [RSCG_Wait](/docs/RSCG_Wait) [![Nuget](https://img.shields.io/nuget/dt/RSCG_WaitAndOptions?label=RSCG_WaitAndOptions)](https://www.nuget.org/packages/RSCG_WaitAndOptions/) ![GitHub Repo stars](https://img.shields.io/github/stars/ignatandrei/RSCG_WaitAndOptions?style=social) 2024-02-21 + 17 [RSCG_TimeBombComment](/docs/RSCG_TimeBombComment) [![Nuget](https://img.shields.io/nuget/dt/RSCG_TimeBombComment?label=RSCG_TimeBombComment)](https://www.nuget.org/packages/RSCG_TimeBombComment/) ![GitHub Repo stars](https://img.shields.io/github/stars/ignatandrei/RSCG_TimeBombComment?style=social) 2023-04-16 - 18 [ShadowWriterProjectInfo](/docs/ShadowWriterProjectInfo) [![Nuget](https://img.shields.io/nuget/dt/ShadowWriter?label=ShadowWriter)](https://www.nuget.org/packages/ShadowWriter/) ![GitHub Repo stars](https://img.shields.io/github/stars/StefanStolz/ShadowWriter?style=social) 2025-07-27 + 18 [RSCG_Wait](/docs/RSCG_Wait) [![Nuget](https://img.shields.io/nuget/dt/RSCG_WaitAndOptions?label=RSCG_WaitAndOptions)](https://www.nuget.org/packages/RSCG_WaitAndOptions/) ![GitHub Repo stars](https://img.shields.io/github/stars/ignatandrei/RSCG_WaitAndOptions?style=social) 2024-02-21 - 19 [ThisAssembly](/docs/ThisAssembly) [![Nuget](https://img.shields.io/nuget/dt/ThisAssembly?label=ThisAssembly)](https://www.nuget.org/packages/ThisAssembly) ![GitHub Repo stars](https://img.shields.io/github/stars/devlooped/ThisAssembly?style=social) 2023-04-16 + 19 [ShadowWriterProjectInfo](/docs/ShadowWriterProjectInfo) [![Nuget](https://img.shields.io/nuget/dt/ShadowWriter?label=ShadowWriter)](https://www.nuget.org/packages/ShadowWriter/) ![GitHub Repo stars](https://img.shields.io/github/stars/StefanStolz/ShadowWriter?style=social) 2025-07-27 - 20 [ThisAssembly.Constants](/docs/ThisAssembly.Constants) [![Nuget](https://img.shields.io/nuget/dt/ThisAssembly.Constants?label=ThisAssembly.Constants)](https://www.nuget.org/packages/ThisAssembly.Constants/) ![GitHub Repo stars](https://img.shields.io/github/stars/devlooped/ThisAssembly?style=social) 2024-07-18 + 20 [ThisAssembly](/docs/ThisAssembly) [![Nuget](https://img.shields.io/nuget/dt/ThisAssembly?label=ThisAssembly)](https://www.nuget.org/packages/ThisAssembly) ![GitHub Repo stars](https://img.shields.io/github/stars/devlooped/ThisAssembly?style=social) 2023-04-16 - 21 [ThisAssembly.Metadata](/docs/ThisAssembly.Metadata) [![Nuget](https://img.shields.io/nuget/dt/ThisAssembly.Metadata?label=ThisAssembly.Metadata)](https://www.nuget.org/packages/ThisAssembly.Metadata/) ![GitHub Repo stars](https://img.shields.io/github/stars/devlooped/ThisAssembly?style=social) 2024-07-20 + 21 [ThisAssembly.Constants](/docs/ThisAssembly.Constants) [![Nuget](https://img.shields.io/nuget/dt/ThisAssembly.Constants?label=ThisAssembly.Constants)](https://www.nuget.org/packages/ThisAssembly.Constants/) ![GitHub Repo stars](https://img.shields.io/github/stars/devlooped/ThisAssembly?style=social) 2024-07-18 + + 22 [ThisAssembly.Metadata](/docs/ThisAssembly.Metadata) [![Nuget](https://img.shields.io/nuget/dt/ThisAssembly.Metadata?label=ThisAssembly.Metadata)](https://www.nuget.org/packages/ThisAssembly.Metadata/) ![GitHub Repo stars](https://img.shields.io/github/stars/devlooped/ThisAssembly?style=social) 2024-07-20 ### See category diff --git a/v2/rscg_examples_site/docs/RSCG-Examples/Bennewitz.Ninja.AutoVersioning.md b/v2/rscg_examples_site/docs/RSCG-Examples/Bennewitz.Ninja.AutoVersioning.md new file mode 100644 index 000000000..b819a1f2b --- /dev/null +++ b/v2/rscg_examples_site/docs/RSCG-Examples/Bennewitz.Ninja.AutoVersioning.md @@ -0,0 +1,380 @@ +--- +sidebar_position: 2770 +title: 277 - Bennewitz.Ninja.AutoVersioning +description: Generating build version numbers for .NET projects +slug: /Bennewitz.Ninja.AutoVersioning +--- +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; +import TOCInline from '@theme/TOCInline'; +import SameCategory from '../Categories/_PrimitiveEnhancementProject.mdx'; + +# Bennewitz.Ninja.AutoVersioning by Brian Bennewitz + + + + +## NuGet / site data +[![Nuget](https://img.shields.io/nuget/dt/Bennewitz.Ninja.AutoVersioning?label=Bennewitz.Ninja.AutoVersioning)](https://www.nuget.org/packages/Bennewitz.Ninja.AutoVersioning/) +[![GitHub last commit](https://img.shields.io/github/last-commit/JanusMael/Bennewitz.Ninja.AutoVersioning?label=updated)](https://github.com/JanusMael/Bennewitz.Ninja.AutoVersioning) +![GitHub Repo stars](https://img.shields.io/github/stars/JanusMael/Bennewitz.Ninja.AutoVersioning?style=social) + +## Details + +### Info +:::info + +Name: **Bennewitz.Ninja.AutoVersioning** + +Assembly info incremental source generator. + +Author: Brian Bennewitz + +NuGet: +*https://www.nuget.org/packages/Bennewitz.Ninja.AutoVersioning/* + + +You can find more details at https://github.com/JanusMael/Bennewitz.Ninja.AutoVersioning + +Source: https://github.com/JanusMael/Bennewitz.Ninja.AutoVersioning + +::: + +### Author +:::note +Brian Bennewitz +![Alt text](https://github.com/JanusMael.png) +::: + +## Original Readme +:::note + +### Bennewitz.Ninja.AutoVersioning + +A [Roslyn incremental source generator](https://learn.microsoft.com/en-us/dotnet/csharp/roslyn-sdk/source-generators-overview) that injects assembly metadata attributes and build-time constants into .NET projects at compile time — no `AssemblyInfo.cs`, no disk writes, full IDE caching. + +[![NuGet](https://img.shields.io/nuget/v/Bennewitz.Ninja.AutoVersioning.svg)](https://www.nuget.org/packages/Bennewitz.Ninja.AutoVersioning) +[![CI](https://github.com/JanusMael/Bennewitz.Ninja.AutoVersioning/actions/workflows/ci.yml/badge.svg)](https://github.com/JanusMael/Bennewitz.Ninja.AutoVersioning/actions/workflows/ci.yml) + +###### Requirements + +.NET SDK 6.0 or later (requires Roslyn 4.0+ for `IIncrementalGenerator` support). The consuming project may target any framework — `.NET Framework 4.x`, `.NET Standard`, `.NET 6+`, etc. + +###### Quick Start + +**1. Add the package:** + +```xml + +``` + +**2. Enable the generator** in your root `Directory.Build.props` (or any `.props` / `.csproj` imported by your build): + +```xml + + true + YourCompany + YourProduct + + + $(GITHUB_SHA) + $(GITHUB_ACTIONS) + $(MY_VERSION_VAR) + +``` + +> **Note:** The package's auto-imported `Build.props` automatically suppresses the 8 SDK-generated attributes that conflict with this generator (e.g. `AssemblyVersion`, `AssemblyCopyright`). It uses granular per-attribute suppressions rather than `false`, which means `InternalsVisibleTo` and all other SDK-generated attributes continue to work normally. Do **not** add `false` yourself — it will break `InternalsVisibleTo`. + +A ready-to-use template is available at [`Directory.Build.props.template`](https://github.com/JanusMael/Bennewitz.Ninja.AutoVersioning/Directory.Build.props.template). + +**3. Build.** The generator runs automatically — no further setup needed. + +> **Tip:** View the generated files in your IDE under `Dependencies → Analyzers → *SourceGenerators`. + +--- + +###### Generated Output + +Given a build on 2026-04-29 at 14:35 UTC for company `Acme Corp`, product `Acme App`, commit `abc1234def`, and public version `3.1.0`: + +######### `AutoVersionedAssemblyInfo.g.cs` + +```csharp +using System.Reflection; +using System.Runtime.CompilerServices; + +[assembly: AssemblyDescription("Assembly Version: 2026.2.429.1435")] +[assembly: AssemblyConfiguration("Release")] +[assembly: AssemblyCompany("Acme Corp")] +[assembly: AssemblyProduct("Acme App v2026.2.429.1435")] +[assembly: AssemblyCopyright("Copyright 2026 [Release]")] +[assembly: AssemblyVersion("2026.2.429.1435")] +[assembly: AssemblyFileVersion("2026.2.429.1435")] +[assembly: AssemblyInformationalVersion("Commit♥: abc1234def")] +[assembly: AssemblyMetadata("CommitSha", "abc1234def")] +[assembly: AssemblyMetadata("GITHUB_SHA", "abc1234def")] +[assembly: AssemblyMetadata("PublicVersion", "3.1.0")] +``` + +######### `DirectoryBuildInfo.g.cs` + +```csharp +// +namespace Bennewitz.Ninja.AutoVersioning +{ + /// Build-time constants generated by the source generator. + public static class DirectoryBuildInfo + { + public const string BuildRelease = "Version 2026.2.429.1435 [built 4/29/2026 2:35:00 PM (UTC)]"; + } +} +``` + +Use `DirectoryBuildInfo.BuildRelease` wherever you need the build version at runtime — error trackers, log enrichment, health endpoints — without reading environment variables. + +--- + +###### Configuration Reference + +| MSBuild Property | Description | Required | +|---|---|---| +| `GenerateAutoVersionedAssemblyInfo` | Set to `true` to enable the generator | **Yes** | +| `AssemblyCompany` | Value for `[assembly: AssemblyCompany(...)]` | **Yes** | +| `AssemblyProduct` | Value for `[assembly: AssemblyProduct(...)]` | **Yes** | +| `CopyrightHolder` | Name shown in the copyright attribute — defaults to `AssemblyCompany` if omitted | No | +| `CommitSha` | Git commit SHA | No | +| `IsContinuousIntegration` | `true` on CI runs | No | +| `PublicVersion` | Your app's public-facing version string | No | +| `Configuration` | `Debug` / `Release` — set automatically by MSBuild | Auto | +| `BuildTimestamp` | Build start time in `yyyyMMddHHmmss` format — captured automatically at MSBuild evaluation time (before any project compiles), ensuring a consistent version across all projects in a multi-project solution build. Override on CI for an exact guarantee: `dotnet build -p:BuildTimestamp=$(date +%Y%m%d%H%M%S)` | Auto | + +######### CI Provider Mappings + +| Provider | Commit SHA | CI flag | +|---|---|---| +| GitHub Actions | `$(GITHUB_SHA)` | `$(GITHUB_ACTIONS)` | +| GitLab CI | `$(CI_COMMIT_SHA)` | `$(GITLAB_CI)` | +| Bitbucket Pipelines | `$(BITBUCKET_COMMIT)` | `$(CI)` | + +######### Version Format + +The generator uses **CalVer**: `YEAR.QUARTER.MMDD.HHmm` + +| Part | Example | Meaning | +|---|---|---| +| Major | `2026` | Calendar year | +| Minor | `2` | Quarter (1–4) | +| Build | `429` | Month + day (`MMdd` as integer) | +| Revision | `1435` | Hour + minute (`HHmm` as integer) | + +--- + +###### How It Works + +This is a modern C# `IIncrementalGenerator`. Compared to legacy `ISourceGenerator` approaches it: + +- Runs **entirely in-memory** — zero files written to disk +- Uses the **Roslyn caching pipeline** — the IDE (Rider, Visual Studio) only re-runs the generator when its inputs change, eliminating background compilation loops +- Reads MSBuild properties **via `AnalyzerConfigOptionsProvider`** — safe, no direct environment variable reads + +The package auto-imports `Build.props` via NuGet, which declares `CompilerVisibleProperty` items and suppresses the SDK's default `AssemblyInfo` generation (preventing CS0579 duplicate attribute errors when the generator is enabled). + +######### Timestamp Consistency in Multi-Project Builds + +`BuildTimestamp` keeps the version consistent across every project in a solution build. See [`docs/MultiProjectBuildTimestamps.md`](https://github.com/JanusMael/Bennewitz.Ninja.AutoVersioning/docs/MultiProjectBuildTimestamps.md) for how it works and what alternative approaches were considered. + +> **TL;DR:** For CI, or any local build where an exact guarantee matters more than convenience, use `-p:BuildTimestamp=...` to fix the value explicitly instead of relying on evaluation-time capture. Ready-to-use wrappers are available at [`Build.ps1.template`](https://github.com/JanusMael/Bennewitz.Ninja.AutoVersioning/Build.ps1.template) (Windows/PowerShell 7+) and [`Build.sh.template`](https://github.com/JanusMael/Bennewitz.Ninja.AutoVersioning/Build.sh.template) (Linux/macOS/bash). + +######### Diagnostics + +| ID | Severity | Description | +|---|---|---| +| `BAUTOVERSIONING00` | Warning | Generator is installed but `GenerateAutoVersionedAssemblyInfo` is not set to `true` (single-line signal) | +| `BAUTOVERSIONING01` | Warning | Generator threw an unexpected exception | +| `BAUTOVERSIONING02` | Error | `AssemblyCompany` is not configured | +| `BAUTOVERSIONING03` | Error | `AssemblyProduct` is not configured | +| `BAUTOVERSIONING04` | Warning | Multi-line setup snippet emitted alongside BAUTOVERSIONING00 — shows the required `Directory.Build.props` configuration | + +--- + +###### Building Locally + +Requires PowerShell 7+ and the .NET SDK. + +```powershell +./Pack.ps1 +``` + +The script prompts for a version (defaults to CalVer `YYYY.Q.MMDD`) and produces `.nupkg` files in `packages/Debug/` and `packages/Release/`. + +--- + +###### License + +MIT © 2026 Brian Bennewitz + + +::: + +### About +:::note + +Generating build version numbers for .NET projects + + +::: + +## How to use + +### Example (source csproj, source files) + + + + + +This is the CSharp Project that references **Bennewitz.Ninja.AutoVersioning** +```xml showLineNumbers {11} + + + + Exe + net10.0 + enable + enable + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + true + + false + false + false + false + false + false + false + false + + + AOM Company + Andrei Ignat Product + + + $(GITHUB_SHA) + $(GITHUB_ACTIONS) + $(MY_VERSION_VAR) + + + true + $(BaseIntermediateOutputPath)\GX + + + + +``` + + + + + + This is the use of **Bennewitz.Ninja.AutoVersioning** in *Program.cs* + +```csharp showLineNumbers +using Bennewitz.Ninja.AutoVersioning; + +Console.WriteLine("Hello, World!"); +Console.WriteLine(DirectoryBuildInfo.BuildRelease); +``` + + + + +### Generated Files + +Those are taken from $(BaseIntermediateOutputPath)\GX + + + + +```csharp showLineNumbers +//------------------------------------------------------------------------------ +// +// This code was automatically generated by Andrei Ignat Product version 2026.3.716.1852; +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ +using System.CodeDom.Compiler; +using System.Reflection; +using System.Runtime.CompilerServices; + +[assembly: AssemblyDescription("Assembly Version: 2026.3.716.1852")] +[assembly: AssemblyConfiguration("Debug")] +[assembly: AssemblyCompany("AOM Company")] +[assembly: AssemblyProduct("Andrei Ignat Product v2026.3.716.1852")] +[assembly: AssemblyCopyright("Copyright 2026 [Debug]")] +[assembly: AssemblyVersion("2026.3.716.1852")] +[assembly: AssemblyFileVersion("2026.3.716.1852")] +[assembly: AssemblyInformationalVersion("Built with ♥")] +``` + + + + +```csharp showLineNumbers + +// +namespace Bennewitz.Ninja.AutoVersioning +{ + /// + /// Build-time constants generated by the source generator. + /// + public static class DirectoryBuildInfo + { + /// The build version string calculated at compile time. + public const string BuildRelease = "Version 2026.3.716.1852 [built 7/16/2026 6:52:32 PM (GST)]"; + } +} +``` + + + + +## Useful + +### Download Example (.NET C#) + +:::tip + +[Download Example project Bennewitz.Ninja.AutoVersioning ](/sources/Bennewitz.Ninja.AutoVersioning.zip) + +::: + + +### Share Bennewitz.Ninja.AutoVersioning + + + +https://ignatandrei.github.io/RSCG_Examples/v2/docs/Bennewitz.Ninja.AutoVersioning + + + diff --git a/v2/rscg_examples_site/docs/RSCG-Examples/index.md b/v2/rscg_examples_site/docs/RSCG-Examples/index.md index 58c3dde48..797c717cc 100644 --- a/v2/rscg_examples_site/docs/RSCG-Examples/index.md +++ b/v2/rscg_examples_site/docs/RSCG-Examples/index.md @@ -1,7 +1,7 @@ --- sidebar_position: 30 -title: 276 RSCG list by category -description: 276 RSCG list by category +title: 277 RSCG list by category +description: 277 RSCG list by category slug: /rscg-examples --- @@ -725,7 +725,7 @@ import DocCardList from '@theme/DocCardList'; ## EnhancementProject
- Expand EnhancementProject =>examples:21 + Expand EnhancementProject =>examples:22 @@ -831,6 +831,11 @@ import DocCardList from '@theme/DocCardList'; [AssemblyMetadata.Generators](/docs/AssemblyMetadata.Generators) + + + +[Bennewitz.Ninja.AutoVersioning](/docs/Bennewitz.Ninja.AutoVersioning) +
@@ -1992,6 +1997,8 @@ flowchart LR; EnhancementProject--> AssemblyMetadata.Generators((AssemblyMetadata.Generators)) + EnhancementProject--> Bennewitz.Ninja.AutoVersioning((Bennewitz.Ninja.AutoVersioning)) + Enum--> NetEscapades.EnumGenerators((NetEscapades.EnumGenerators)) Enum--> EnumClass((EnumClass)) diff --git a/v2/rscg_examples_site/docs/about.md b/v2/rscg_examples_site/docs/about.md index 098ca6746..cb2cbce29 100644 --- a/v2/rscg_examples_site/docs/about.md +++ b/v2/rscg_examples_site/docs/about.md @@ -6,7 +6,7 @@ title: About ## Content You will find here code examples -of 276 Roslyn Source Code Generator (RSCG) +of 277 Roslyn Source Code Generator (RSCG) that can be useful for you. That means, you will write more elegant and concise code - even if the generators code is not always nice to look. ## Are those examples ready for production? diff --git a/v2/rscg_examples_site/docs/indexRSCG.md b/v2/rscg_examples_site/docs/indexRSCG.md index d1bb99bd2..2010727bb 100644 --- a/v2/rscg_examples_site/docs/indexRSCG.md +++ b/v2/rscg_examples_site/docs/indexRSCG.md @@ -7,9 +7,9 @@ slug: /List-of-RSCG import useBaseUrl from '@docusaurus/useBaseUrl'; -## 276 RSCG with examples in descending chronological order +## 277 RSCG with examples in descending chronological order -This is the list of 276 ( 16 from Microsoft) RSCG with examples +This is the list of 277 ( 16 from Microsoft) RSCG with examples [See by category](/docs/rscg-examples) [See as json](/exports/RSCG.json) [See as Excel](/exports/RSCG.xlsx) @@ -20,6 +20,7 @@ This is the list of 276 ( 16 from Microsoft) RSCG with examples | No | Name | Date | Category | | --------- | ----- | ---- | -------- | +|277| [Bennewitz.Ninja.AutoVersioning by Brian Bennewitz ](/docs/Bennewitz.Ninja.AutoVersioning)|2026-07-04 => 04 July 2026 | [EnhancementProject](/docs/Categories/EnhancementProject) | |276| [TinyBDD.MSTest by Jerrett Davis ](/docs/TinyBDD.MSTest)|2026-07-03 => 03 July 2026 | [Tests](/docs/Categories/Tests) | |275| [Porticle.Enumly by Carsten Jendro ](/docs/Porticle.Enumly)|2026-07-02 => 02 July 2026 | [Enum](/docs/Categories/Enum) | |274| [Dirge by Kazuki Kohzuki ](/docs/Dirge)|2026-07-01 => 01 July 2026 | [Disposer](/docs/Categories/Disposer) | diff --git a/v2/rscg_examples_site/src/components/HomepageFeatures/index.js b/v2/rscg_examples_site/src/components/HomepageFeatures/index.js index 0cd686d1b..aa7c60932 100644 --- a/v2/rscg_examples_site/src/components/HomepageFeatures/index.js +++ b/v2/rscg_examples_site/src/components/HomepageFeatures/index.js @@ -4,7 +4,7 @@ import styles from './styles.module.css'; const FeatureList = [ { -title: '276 Examples (16 from MSFT)', +title: '277 Examples (16 from MSFT)', Svg: require('@site/static/img/undraw_docusaurus_mountain.svg').default, description: ( <> diff --git a/v2/rscg_examples_site/static/exports/RSCG.json b/v2/rscg_examples_site/static/exports/RSCG.json index e60d5dac8..e5eb212ef 100644 --- a/v2/rscg_examples_site/static/exports/RSCG.json +++ b/v2/rscg_examples_site/static/exports/RSCG.json @@ -2209,6 +2209,14 @@ "Source": "https://github.com/JerrettDavis/TinyBDD", "Category": "Tests", "AddedOn": "2026-07-03T00:00:00" + }, + { + "Name": "Bennewitz.Ninja.AutoVersioning", + "Link": "https://ignatandrei.github.io/RSCG_Examples/v2/docs/Bennewitz.Ninja.AutoVersioning", + "NuGet": "https://www.nuget.org/packages/Bennewitz.Ninja.AutoVersioning/", + "Source": "https://github.com/JanusMael/Bennewitz.Ninja.AutoVersioning", + "Category": "EnhancementProject", + "AddedOn": "2026-07-04T00:00:00" } ] } \ No newline at end of file diff --git a/v2/rscg_examples_site/static/exports/RSCG.xlsx b/v2/rscg_examples_site/static/exports/RSCG.xlsx index 292fd9cef..b31bd8353 100644 Binary files a/v2/rscg_examples_site/static/exports/RSCG.xlsx and b/v2/rscg_examples_site/static/exports/RSCG.xlsx differ diff --git a/v2/rscg_examples_site/static/sources/Bennewitz.Ninja.AutoVersioning.zip b/v2/rscg_examples_site/static/sources/Bennewitz.Ninja.AutoVersioning.zip new file mode 100644 index 000000000..a5bd36e6d Binary files /dev/null and b/v2/rscg_examples_site/static/sources/Bennewitz.Ninja.AutoVersioning.zip differ