diff --git a/README.md b/README.md
index 8f50ff4bf..e0d983841 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# RSCG - 208 Examples of Roslyn Source Code Generators / 14 created by Microsoft /
+# RSCG - 209 Examples of Roslyn Source Code Generators / 14 created by Microsoft /
## Latest Update : 2025-07-26 => 26 July 2025
@@ -20,8 +20,30 @@ If you want to be notified each time I add a new RSCG example , please click htt
## Content
-Those are the 208 Roslyn Source Code Generators that I have tested you can see and download source code example.
+Those are the 209 Roslyn Source Code Generators that I have tested you can see and download source code example.
( including 14 from Microsoft )
+### 209. [ShadowWriterProjectInfo](https://ignatandrei.github.io/RSCG_Examples/v2/docs/ShadowWriterProjectInfo) , in the [Builder](https://ignatandrei.github.io/RSCG_Examples/v2/docs/rscg-examples#builder) category
+
+Generated on : 2025-07-24 => 24 July 2025
+
+
+ Expand
+
+
+
+Author: Stefan Stolz
+
+Leverage the capabilities of Roslyn source generators to help generate boilerplate code efficiently.
+
+Nuget: [https://www.nuget.org/packages/ShadowWriter/](https://www.nuget.org/packages/ShadowWriter/)
+
+
+Link: [https://ignatandrei.github.io/RSCG_Examples/v2/docs/ShadowWriterProjectInfo](https://ignatandrei.github.io/RSCG_Examples/v2/docs/ShadowWriterProjectInfo)
+
+Source: [https://github.com/StefanStolz/ShadowWriter](https://github.com/StefanStolz/ShadowWriter)
+
+
+
### 208. [AsyncIt](https://ignatandrei.github.io/RSCG_Examples/v2/docs/AsyncIt) , in the [Async](https://ignatandrei.github.io/RSCG_Examples/v2/docs/rscg-examples#async) category
Generated on : 2025-07-26 => 26 July 2025
diff --git a/v2/Generator/all.csv b/v2/Generator/all.csv
index b9f716101..b26f5eaca 100644
--- a/v2/Generator/all.csv
+++ b/v2/Generator/all.csv
@@ -207,3 +207,4 @@ Nr,Key,Source,Category
206,ShadowWriterBuilder, https://github.com/StefanStolz/ShadowWriter,Builder
207,AutoInterface, https://github.com/BlackWhiteYoshi/AutoInterface,Interface
208,AsyncIt, https://github.com/oleg-shilo/AsyncIt,Async
+209,ShadowWriterProjectInfo, https://github.com/StefanStolz/ShadowWriter,Builder
diff --git a/v2/RSCGExamplesData/GeneratorDataRec.json b/v2/RSCGExamplesData/GeneratorDataRec.json
index 0e64d28b2..c0e219d92 100644
--- a/v2/RSCGExamplesData/GeneratorDataRec.json
+++ b/v2/RSCGExamplesData/GeneratorDataRec.json
@@ -1256,5 +1256,11 @@
"Category":35,
"dtStart": "2025-07-26T00:00:00",
"show": true
+},
+{
+ "ID":"ShadowWriterProjectInfo",
+ "Category": 4,
+ "dtStart": "2025-07-24T00:00:00",
+ "show": true
}
]
\ No newline at end of file
diff --git a/v2/book/examples/ShadowWriterProjectInfo.html b/v2/book/examples/ShadowWriterProjectInfo.html
new file mode 100644
index 000000000..29584619d
--- /dev/null
+++ b/v2/book/examples/ShadowWriterProjectInfo.html
@@ -0,0 +1,63 @@
+
+
RSCG nr 209 : ShadowWriterProjectInfo
+
+Info
+Nuget : https://www.nuget.org/packages/ShadowWriter/
+
+You can find more details at : https://github.com/StefanStolz/ShadowWriter
+
+Author :Stefan Stolz
+
+Source: https://github.com/StefanStolz/ShadowWriter
+
+About
+
+Generating C# code from project attributes
+
+
+ How to use
+
+
+
+
+This was for me the starting code
+
+
+ I have coded the file Program.cs
+
+
+
+ And here are the generated files
+
+
+ The file generated is BuilderAttribute.g.cs
+
+
+
+
+ The file generated is NullObjectAttribute.g.cs
+
+
+
+
+ The file generated is ShadowWriter.TheProject.g.cs
+
+
+
+
+ You can download the code and this page as pdf from
+
+ https://ignatandrei.github.io/RSCG_Examples/v2/docs/ShadowWriterProjectInfo
+
+
+
+
+
+ You can see the whole list at
+
+ https://ignatandrei.github.io/RSCG_Examples/v2/docs/List-of-RSCG
+
+
+
diff --git a/v2/book/list.html b/v2/book/list.html
index 814408d9b..2e81820ee 100644
--- a/v2/book/list.html
+++ b/v2/book/list.html
@@ -17,7 +17,7 @@
-This is the list of 208 RSCG with examples =>
+This is the list of 209 RSCG with examples =>
diff --git a/v2/book/pandocHTML.yaml b/v2/book/pandocHTML.yaml
index b635efd8f..a87b5b18a 100644
--- a/v2/book/pandocHTML.yaml
+++ b/v2/book/pandocHTML.yaml
@@ -222,6 +222,7 @@ input-files:
- examples/ShadowWriterBuilder.html
- examples/AutoInterface.html
- examples/AsyncIt.html
+- examples/ShadowWriterProjectInfo.html
# or you may use input-file: with a single value
# defaults:
diff --git a/v2/rscg_examples/ShadowWriterProjectInfo/description.json b/v2/rscg_examples/ShadowWriterProjectInfo/description.json
new file mode 100644
index 000000000..c0f1f676b
--- /dev/null
+++ b/v2/rscg_examples/ShadowWriterProjectInfo/description.json
@@ -0,0 +1,22 @@
+{
+ "generator":{
+ "name":"ShadowWriterProjectInfo",
+ "nuget":[
+ "https://www.nuget.org/packages/ShadowWriter/"
+ ],
+ "link":"https://github.com/StefanStolz/ShadowWriter",
+ "author":"Stefan Stolz",
+ "source":"https://github.com/StefanStolz/ShadowWriter"
+ },
+ "data":{
+ "goodFor":["Generating C# code from project attributes"],
+ "csprojDemo":"DemoAttr.csproj",
+ "csFiles":["Program.cs"],
+ "excludeDirectoryGenerated":[""],
+ "includeAdditionalFiles":[""]
+ },
+ "links":{
+ "blog":"",
+ "video":""
+ }
+}
\ No newline at end of file
diff --git a/v2/rscg_examples/ShadowWriterProjectInfo/nuget.txt b/v2/rscg_examples/ShadowWriterProjectInfo/nuget.txt
new file mode 100644
index 000000000..adbcd7c84
--- /dev/null
+++ b/v2/rscg_examples/ShadowWriterProjectInfo/nuget.txt
@@ -0,0 +1 @@
+Leverage the capabilities of Roslyn source generators to help generate boilerplate code efficiently.
\ No newline at end of file
diff --git a/v2/rscg_examples/ShadowWriterProjectInfo/readme.txt b/v2/rscg_examples/ShadowWriterProjectInfo/readme.txt
new file mode 100644
index 000000000..86c9ab28a
--- /dev/null
+++ b/v2/rscg_examples/ShadowWriterProjectInfo/readme.txt
@@ -0,0 +1,106 @@
+# ShadowWriter
+
+[](https://www.nuget.org/packages/ShadowWriter)
+[](LICENSE)
+[](https://github.com/StefanStolz/ShadowWriter/actions)
+
+**ShadowWriter** is a Roslyn Source Generator designed to simplify and automate aspects of .NET development.
+It currently supports the following features:
+
+## ✨ Features
+
+Samples can be found in the [Source-Code](https://github.com/StefanStolz/ShadowWriter/tree/main/src/ShadowWriter.Sample) or in the [Wiki](https://github.com/StefanStolz/ShadowWriter/wiki).
+
+### 1. Generate Null Objects
+The NullObject feature in ShadowWriter provides a simple way to automatically generate null object implementations for interfaces and classes. This pattern is useful for providing default "do nothing" implementations that can help avoid null reference exceptions and simplify code.
+
+#### Usage
+To create a null object implementation, simply add the `[NullObject]` attribute to your class:
+
+```csharp
+[NullObject]
+public partial class ImplementingMyInterface : IMyInterface
+{
+}
+```
+
+### 2. Inject Project Information
+Embeds values from the project file (`*.csproj`) directly into your source code.
+This is useful for build metadata, version numbers, or project-specific configuration.
+
+#### Available Properties
+The generated `TheProject` class provides the following static properties:
+
+| Property | Description | Example |
+|----------|-------------|---------|
+| `FullPath` | The complete path to the project file | `/path/to/YourProject.csproj` |
+| `ProjectDirectory` | The directory containing the project file | `/path/to/` |
+| `Name` | The name of the project | `YourProject` |
+| `OutDir` | The output directory for compiled artifacts | `/path/to/artifacts/bin/YourProject/debug/` |
+| `Version` | The current version of the project | `1.0.0` |
+| `RootNamespace` | The root namespace of the project | `YourProject` |
+
+#### Example Usage
+
+```csharp
+// Access project information anywhere in your code
+Console.WriteLine($"Project Name: {TheProject.Name}");
+Console.WriteLine($"Project Version: {TheProject.Version}");
+Console.WriteLine($"Project Output Directory: {TheProject.OutDir}");
+```
+
+
+### 3. Experimental: Typed Access to EmbeddedResources
+Generates strongly typed wrappers for `EmbeddedResources`, allowing safe and convenient access to resources at runtime.
+
+> ⚠️ Feature #3 is experimental and may change significantly in future versions.
+
+Details can be found in the [Wiki](https://github.com/StefanStolz/ShadowWriter/wiki/ProjectFiles).
+
+### 4. Generate Builders for Records
+
+The **Builder** feature in ShadowWriter automatically generates builder classes for your `record` types. This significantly reduces boilerplate when constructing complex objects, especially with optional and nullable parameters or when you want to use a fluent API pattern for object creation.
+
+#### Usage
+
+To enable builder generation, simply annotate your partial `record` with the `[Builder]` attribute:
+
+```csharp
+[Builder]
+public partial record WithBuilder(int Number);
+```
+
+The generator will create a corresponding builder class (e.g., `WithBuilder.Builder`) with mutable Properties for each Parameter.
+
+#### Examples
+
+A variety of record types are supported:
+
+```csharp
+// Record with a single value type
+[Builder]
+public partial record WithBuilder(int Number);
+```
+
+The generated builder enables you to create instances using a clear, chainable API. For example:
+
+```csharp
+var builder = new WithBuilder.Builder();
+builder.Number = 1;
+var item = builder.Build();
+```
+
+## 📦 Installation
+
+You can install ShadowWriter via NuGet:
+
+```sh
+dotnet package add ShadowWriter
+```
+
+⚙️ Usage
+ShadowWriter runs automatically during compilation.
+No manual setup is needed. Documentation and configuration options will be expanded in future versions.
+
+📄 License
+This project is licensed under the MIT License.
diff --git a/v2/rscg_examples/ShadowWriterProjectInfo/src/.tours/ShadowWriterProjectInfo.tour b/v2/rscg_examples/ShadowWriterProjectInfo/src/.tours/ShadowWriterProjectInfo.tour
new file mode 100644
index 000000000..1babca63c
--- /dev/null
+++ b/v2/rscg_examples/ShadowWriterProjectInfo/src/.tours/ShadowWriterProjectInfo.tour
@@ -0,0 +1,42 @@
+
+{
+ "$schema": "https://aka.ms/codetour-schema",
+ "title": "ShadowWriterProjectInfo",
+ "steps":
+ [
+ {
+ "file": "DemoAttr/DemoAttr.csproj",
+ "description": "First, we add Nuget [ShadowWriter](https://www.nuget.org/packages/ShadowWriter/) in csproj ",
+ "pattern": "ShadowWriter"
+ }
+
+ ,{
+ "file": "DemoAttr/Program.cs",
+ "description": "File Program.cs \r\n>> dotnet run --project DemoAttr/DemoAttr.csproj ",
+ "pattern": "this is the code"
+ }
+
+
+ ,{
+ "file": "DemoAttr/obj/GX/ShadowWriter/ShadowWriter.ProjectInfoGenerator/ShadowWriter.TheProject.g.cs",
+ "description": "Generated File 3 from 3 : ShadowWriter.TheProject.g.cs ",
+ "line": 1
+ }
+
+ ,{
+ "file": "DemoAttr/obj/GX/ShadowWriter/ShadowWriter.NullObjectGenerator/NullObjectAttribute.g.cs",
+ "description": "Generated File 2 from 3 : NullObjectAttribute.g.cs ",
+ "line": 1
+ }
+
+ ,{
+ "file": "DemoAttr/obj/GX/ShadowWriter/ShadowWriter.BuilderGenerator/BuilderAttribute.g.cs",
+ "description": "Generated File 1 from 3 : BuilderAttribute.g.cs ",
+ "line": 1
+ }
+
+ ],
+
+ "ref": "main"
+
+}
\ No newline at end of file
diff --git a/v2/rscg_examples/ShadowWriterProjectInfo/src/DemoAttr.sln b/v2/rscg_examples/ShadowWriterProjectInfo/src/DemoAttr.sln
new file mode 100644
index 000000000..9133e4a8c
--- /dev/null
+++ b/v2/rscg_examples/ShadowWriterProjectInfo/src/DemoAttr.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.14.36408.4 d17.14
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DemoAttr", "DemoAttr\DemoAttr.csproj", "{E7AE387F-3B33-41EF-A809-94E5C21EDBFC}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {E7AE387F-3B33-41EF-A809-94E5C21EDBFC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E7AE387F-3B33-41EF-A809-94E5C21EDBFC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E7AE387F-3B33-41EF-A809-94E5C21EDBFC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E7AE387F-3B33-41EF-A809-94E5C21EDBFC}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {75065D34-E2FE-414E-BE26-D871D5945284}
+ EndGlobalSection
+EndGlobal
diff --git a/v2/rscg_examples/ShadowWriterProjectInfo/src/DemoAttr/DemoAttr.csproj b/v2/rscg_examples/ShadowWriterProjectInfo/src/DemoAttr/DemoAttr.csproj
new file mode 100644
index 000000000..f92a07d3e
--- /dev/null
+++ b/v2/rscg_examples/ShadowWriterProjectInfo/src/DemoAttr/DemoAttr.csproj
@@ -0,0 +1,20 @@
+
+
+
+ Exe
+ net9.0
+ enable
+ enable
+
+
+
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+
+ true
+ $(BaseIntermediateOutputPath)\GX
+
+
diff --git a/v2/rscg_examples/ShadowWriterProjectInfo/src/DemoAttr/Program.cs b/v2/rscg_examples/ShadowWriterProjectInfo/src/DemoAttr/Program.cs
new file mode 100644
index 000000000..41d98b578
--- /dev/null
+++ b/v2/rscg_examples/ShadowWriterProjectInfo/src/DemoAttr/Program.cs
@@ -0,0 +1,5 @@
+// Access project information anywhere in your code
+using ShadowWriter;
+Console.WriteLine($"Project Name: {TheProject.Name}");
+Console.WriteLine($"Project Version: {TheProject.Version}");
+Console.WriteLine($"Project Build Date: {TheProject.BuildTimeUtc}");
\ No newline at end of file
diff --git a/v2/rscg_examples/ShadowWriterProjectInfo/video.json b/v2/rscg_examples/ShadowWriterProjectInfo/video.json
new file mode 100644
index 000000000..049240047
--- /dev/null
+++ b/v2/rscg_examples/ShadowWriterProjectInfo/video.json
@@ -0,0 +1,39 @@
+{
+ "scriptName": "ShadowWriterProjectInfo",
+ "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 ShadowWriter . Generating C# code from project attributes ."},
+{"typeStep":"browser","arg":"https://www.nuget.org/packages/ShadowWriter/"},
+{"typeStep":"text","arg": "The whole example is here"},
+{"typeStep":"browser","arg":"https://ignatandrei.github.io/RSCG_Examples/v2/docs/ShadowWriterProjectInfo"},
+{"typeStep":"text","arg": "You can download the code from here"},
+{"typeStep":"browser","arg":"https://ignatandrei.github.io/RSCG_Examples/v2/docs/ShadowWriterProjectInfo#download-example-net--c-"},
+{"typeStep":"text","arg":"Here is the code downloaded "},
+{"typeStep":"exec","arg":"explorer.exe /select,D:\\gth\\RSCG_Examples\\v2\\rscg_examples\\ShadowWriterProjectInfo\\src\\DemoAttr.sln"},
+{"typeStep":"text","arg": "So , let's start the project with Visual Studio Code "},
+{"typeStep":"stepvscode","arg": "-n D:\\gth\\RSCG_Examples\\v2\\rscg_examples\\ShadowWriterProjectInfo\\src"},
+
+{"typeStep":"text","arg": "To use it ,you will put the Nuget ShadowWriter into the csproj "},
+
+{"typeStep":"stepvscode","arg": "-r -g D:\\gth\\RSCG_Examples\\v2\\rscg_examples\\ShadowWriterProjectInfo\\src\\DemoAttr\\DemoAttr.csproj"},
+
+{"typeStep":"text","arg": "And now I will show you an example of using ShadowWriter"},
+
+{"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":"DemoAttr.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/ShadowWriterProjectInfo#download-example-net--c-",
+SpeakTest=" "},
+{"typeStep":"waitseconds","arg":"30"},
+]
+}
diff --git a/v2/rscg_examples_site/docs/Categories/Builder.md b/v2/rscg_examples_site/docs/Categories/Builder.md
index 6b0c0d3ba..8d41eef86 100644
--- a/v2/rscg_examples_site/docs/Categories/Builder.md
+++ b/v2/rscg_examples_site/docs/Categories/Builder.md
@@ -1,6 +1,6 @@
Builder
-Number RSCG: 7
+Number RSCG: 8
1 [Architect.DomainModeling](/docs/Architect.DomainModeling)
@@ -14,5 +14,7 @@ Number RSCG: 7
6 [ShadowWriterBuilder](/docs/ShadowWriterBuilder)
- 7 [StepwiseBuilderGenerator](/docs/StepwiseBuilderGenerator)
+ 7 [ShadowWriterProjectInfo](/docs/ShadowWriterProjectInfo)
+
+ 8 [StepwiseBuilderGenerator](/docs/StepwiseBuilderGenerator)
\ No newline at end of file
diff --git a/v2/rscg_examples_site/docs/RSCG-Examples/ShadowWriterBuilder.md b/v2/rscg_examples_site/docs/RSCG-Examples/ShadowWriterBuilder.md
index 2866a01f6..f5b02bfd9 100644
--- a/v2/rscg_examples_site/docs/RSCG-Examples/ShadowWriterBuilder.md
+++ b/v2/rscg_examples_site/docs/RSCG-Examples/ShadowWriterBuilder.md
@@ -331,7 +331,7 @@ public partial record Person
https://ignatandrei.github.io/RSCG_Examples/v2/docs/ShadowWriterBuilder
-### In the same category (Builder) - 6 other generators
+### In the same category (Builder) - 7 other generators
#### [Architect.DomainModeling](/docs/Architect.DomainModeling)
@@ -349,5 +349,8 @@ https://ignatandrei.github.io/RSCG_Examples/v2/docs/ShadowWriterBuilder
#### [Hsu.Sg.FluentMember](/docs/Hsu.Sg.FluentMember)
+#### [ShadowWriterProjectInfo](/docs/ShadowWriterProjectInfo)
+
+
#### [StepwiseBuilderGenerator](/docs/StepwiseBuilderGenerator)
diff --git a/v2/rscg_examples_site/docs/RSCG-Examples/ShadowWriterProjectInfo.md b/v2/rscg_examples_site/docs/RSCG-Examples/ShadowWriterProjectInfo.md
new file mode 100644
index 000000000..1fd94e34b
--- /dev/null
+++ b/v2/rscg_examples_site/docs/RSCG-Examples/ShadowWriterProjectInfo.md
@@ -0,0 +1,361 @@
+---
+sidebar_position: 2090
+title: 209 - ShadowWriterProjectInfo
+description: Generating C# code from project attributes
+slug: /ShadowWriterProjectInfo
+---
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+import TOCInline from '@theme/TOCInline';
+
+# ShadowWriterProjectInfo by Stefan Stolz
+
+
+
+
+## NuGet / site data
+[](https://www.nuget.org/packages/ShadowWriter/)
+[](https://github.com/StefanStolz/ShadowWriter)
+
+
+## Details
+
+### Info
+:::info
+
+Name: **ShadowWriterProjectInfo**
+
+Leverage the capabilities of Roslyn source generators to help generate boilerplate code efficiently.
+
+Author: Stefan Stolz
+
+NuGet:
+*https://www.nuget.org/packages/ShadowWriter/*
+
+
+You can find more details at https://github.com/StefanStolz/ShadowWriter
+
+Source: https://github.com/StefanStolz/ShadowWriter
+
+:::
+
+### Original Readme
+:::note
+
+# ShadowWriter
+
+[](https://www.nuget.org/packages/ShadowWriter)
+[](https://github.com/StefanStolz/ShadowWriter/LICENSE)
+[](https://github.com/StefanStolz/ShadowWriter/actions)
+
+**ShadowWriter** is a Roslyn Source Generator designed to simplify and automate aspects of .NET development.
+It currently supports the following features:
+
+## ✨ Features
+
+Samples can be found in the [Source-Code](https://github.com/StefanStolz/ShadowWriter/tree/main/src/ShadowWriter.Sample) or in the [Wiki](https://github.com/StefanStolz/ShadowWriter/wiki).
+
+### 1. Generate Null Objects
+The NullObject feature in ShadowWriter provides a simple way to automatically generate null object implementations for interfaces and classes. This pattern is useful for providing default "do nothing" implementations that can help avoid null reference exceptions and simplify code.
+
+#### Usage
+To create a null object implementation, simply add the `[NullObject]` attribute to your class:
+
+```csharp
+[NullObject]
+public partial class ImplementingMyInterface : IMyInterface
+{
+}
+```
+
+### 2. Inject Project Information
+Embeds values from the project file (`*.csproj`) directly into your source code.
+This is useful for build metadata, version numbers, or project-specific configuration.
+
+#### Available Properties
+The generated `TheProject` class provides the following static properties:
+
+| Property | Description | Example |
+|----------|-------------|---------|
+| `FullPath` | The complete path to the project file | `/path/to/YourProject.csproj` |
+| `ProjectDirectory` | The directory containing the project file | `/path/to/` |
+| `Name` | The name of the project | `YourProject` |
+| `OutDir` | The output directory for compiled artifacts | `/path/to/artifacts/bin/YourProject/debug/` |
+| `Version` | The current version of the project | `1.0.0` |
+| `RootNamespace` | The root namespace of the project | `YourProject` |
+
+#### Example Usage
+
+```csharp
+// Access project information anywhere in your code
+Console.WriteLine($"Project Name: {TheProject.Name}");
+Console.WriteLine($"Project Version: {TheProject.Version}");
+Console.WriteLine($"Project Output Directory: {TheProject.OutDir}");
+```
+
+
+### 3. Experimental: Typed Access to EmbeddedResources
+Generates strongly typed wrappers for `EmbeddedResources`, allowing safe and convenient access to resources at runtime.
+
+> ⚠️ Feature #3 is experimental and may change significantly in future versions.
+
+Details can be found in the [Wiki](https://github.com/StefanStolz/ShadowWriter/wiki/ProjectFiles).
+
+### 4. Generate Builders for Records
+
+The **Builder** feature in ShadowWriter automatically generates builder classes for your `record` types. This significantly reduces boilerplate when constructing complex objects, especially with optional and nullable parameters or when you want to use a fluent API pattern for object creation.
+
+#### Usage
+
+To enable builder generation, simply annotate your partial `record` with the `[Builder]` attribute:
+
+```csharp
+[Builder]
+public partial record WithBuilder(int Number);
+```
+
+The generator will create a corresponding builder class (e.g., `WithBuilder.Builder`) with mutable Properties for each Parameter.
+
+#### Examples
+
+A variety of record types are supported:
+
+```csharp
+// Record with a single value type
+[Builder]
+public partial record WithBuilder(int Number);
+```
+
+The generated builder enables you to create instances using a clear, chainable API. For example:
+
+```csharp
+var builder = new WithBuilder.Builder();
+builder.Number = 1;
+var item = builder.Build();
+```
+
+## 📦 Installation
+
+You can install ShadowWriter via NuGet:
+
+```sh
+dotnet package add ShadowWriter
+```
+
+⚙️ Usage
+ShadowWriter runs automatically during compilation.
+No manual setup is needed. Documentation and configuration options will be expanded in future versions.
+
+📄 License
+This project is licensed under the MIT License.
+
+
+:::
+
+### About
+:::note
+
+Generating C# code from project attributes
+
+
+:::
+
+## How to use
+
+### Example (source csproj, source files)
+
+
+
+
+
+This is the CSharp Project that references **ShadowWriterProjectInfo**
+```xml showLineNumbers {11}
+
+
+
+ Exe
+ net9.0
+ enable
+ enable
+
+
+
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+
+ true
+ $(BaseIntermediateOutputPath)\GX
+
+
+
+```
+
+
+
+
+
+ This is the use of **ShadowWriterProjectInfo** in *Program.cs*
+
+```csharp showLineNumbers
+// Access project information anywhere in your code
+using ShadowWriter;
+Console.WriteLine($"Project Name: {TheProject.Name}");
+Console.WriteLine($"Project Version: {TheProject.Version}");
+Console.WriteLine($"Project Build Date: {TheProject.BuildTimeUtc}");
+```
+
+
+
+
+### Generated Files
+
+Those are taken from $(BaseIntermediateOutputPath)\GX
+
+
+
+
+
+
+
+```csharp showLineNumbers
+//
+
+using System;
+using System.CodeDom.Compiler;
+using System.Runtime.CompilerServices;
+
+namespace ShadowWriter
+{
+ [CompilerGenerated]
+ [GeneratedCode("ShadowWriter", "0.9.5.0")]
+ [System.AttributeUsage(AttributeTargets.Class)]
+ internal sealed class BuilderAttribute : System.Attribute
+ {
+
+ }
+}
+```
+
+
+
+
+
+
+
+```csharp showLineNumbers
+//
+
+using System;
+using System.CodeDom.Compiler;
+using System.Runtime.CompilerServices;
+
+namespace ShadowWriter
+{
+ [CompilerGenerated]
+ [GeneratedCode("ShadowWriter", "0.9.5.0")]
+ [System.AttributeUsage(AttributeTargets.Interface | AttributeTargets.Class)]
+ internal sealed class NullObjectAttribute : System.Attribute
+ {
+
+ }
+
+ [CompilerGenerated]
+ [GeneratedCode("ShadowWriter", "0.9.5.0")]
+ [System.AttributeUsage(System.AttributeTargets.Interface)]
+ internal sealed class ClassNameAttribute : System.Attribute
+ {
+ public string Name { get; }
+
+ public ClassNameAttribute(string name)
+ {
+ this.Name = name;
+ }
+
+ public ClassNameAttribute()
+ {
+ this.Name = string.Empty;
+ }
+ }
+}
+```
+
+
+
+
+
+
+
+```csharp showLineNumbers
+using System;
+using System.CodeDom.Compiler;
+using System.Runtime.CompilerServices;
+
+namespace ShadowWriter;
+
+[CompilerGenerated]
+[GeneratedCode("ShadowWriter", "0.9.5.0")]
+internal static class TheProject
+{
+ public static string FullPath => @"D:\gth\RSCG_Examples\v2\rscg_examples\ShadowWriterProjectInfo\src\DemoAttr\DemoAttr\DemoAttr.csproj";
+ public static string ProjectDirectory => @"D:\gth\RSCG_Examples\v2\rscg_examples\ShadowWriterProjectInfo\src\DemoAttr\DemoAttr";
+ public static string Name => @"DemoAttr";
+ public static string OutDir => @"C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\Roslyn\bin\Debug\net9.0\";
+ public static string Version => @"1.0.0";
+ public static string RootNamespace => @"DemoAttr";
+ public static DateTimeOffset BuildTimeUtc => new DateTimeOffset(638911364201257764, TimeSpan.Zero);
+}
+```
+
+
+
+
+
+
+## Useful
+
+### Download Example (.NET C#)
+
+:::tip
+
+[Download Example project ShadowWriterProjectInfo ](/sources/ShadowWriterProjectInfo.zip)
+
+:::
+
+
+### Share ShadowWriterProjectInfo
+
+
+
+https://ignatandrei.github.io/RSCG_Examples/v2/docs/ShadowWriterProjectInfo
+
+### In the same category (Builder) - 7 other generators
+
+
+#### [Architect.DomainModeling](/docs/Architect.DomainModeling)
+
+
+#### [BuilderGenerator](/docs/BuilderGenerator)
+
+
+#### [DimonSmart.BuilderGenerator](/docs/DimonSmart.BuilderGenerator)
+
+
+#### [Fluentify](/docs/Fluentify)
+
+
+#### [Hsu.Sg.FluentMember](/docs/Hsu.Sg.FluentMember)
+
+
+#### [ShadowWriterBuilder](/docs/ShadowWriterBuilder)
+
+
+#### [StepwiseBuilderGenerator](/docs/StepwiseBuilderGenerator)
+
diff --git a/v2/rscg_examples_site/docs/RSCG-Examples/index.md b/v2/rscg_examples_site/docs/RSCG-Examples/index.md
index b1677131c..aef5fa52e 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: 208 RSCG list by category
-description: 208 RSCG list by category
+title: 209 RSCG list by category
+description: 209 RSCG list by category
slug: /rscg-examples
---
@@ -145,7 +145,7 @@ import DocCardList from '@theme/DocCardList';
## Builder
- Expand Builder =>examples:7
+ Expand Builder =>examples:8
@@ -181,6 +181,11 @@ import DocCardList from '@theme/DocCardList';
[ShadowWriterBuilder](/docs/ShadowWriterBuilder)
+
+
+
+[ShadowWriterProjectInfo](/docs/ShadowWriterProjectInfo)
+
@@ -1350,6 +1355,8 @@ flowchart LR;
Builder--> ShadowWriterBuilder((ShadowWriterBuilder))
+ Builder--> ShadowWriterProjectInfo((ShadowWriterProjectInfo))
+
Clone--> CopyTo((CopyTo))
Clone--> Dolly((Dolly))
diff --git a/v2/rscg_examples_site/docs/about.md b/v2/rscg_examples_site/docs/about.md
index 4e88ed9e6..87330babe 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 208 Roslyn Source Code Generator (RSCG)
+of 209 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 0ee88026e..cffaf4580 100644
--- a/v2/rscg_examples_site/docs/indexRSCG.md
+++ b/v2/rscg_examples_site/docs/indexRSCG.md
@@ -10,9 +10,9 @@ import useBaseUrl from '@docusaurus/useBaseUrl';
;
-## 208 RSCG with examples in descending chronological order
+## 209 RSCG with examples in descending chronological order
-This is the list of 208 ( 14 from Microsoft) RSCG with examples
+This is the list of 209 ( 14 from Microsoft) RSCG with examples
[See by category](/docs/rscg-examples) [See as json](/exports/RSCG.json) [See as Excel](/exports/RSCG.xlsx)
@@ -23,6 +23,7 @@ This is the list of 208 ( 14 from Microsoft) RSCG with examples
| No | Name | Date | Category |
| --------- | ----- | ---- | -------- |
+|209| [ShadowWriterProjectInfo by Stefan Stolz ](/docs/ShadowWriterProjectInfo)|2025-07-24 => 24 July 2025 | [Builder](/docs/Categories/Builder) |
|208| [AsyncIt by Oleg Shilo ](/docs/AsyncIt)|2025-07-26 => 26 July 2025 | [Async](/docs/Categories/Async) |
|207| [AutoInterface by Black White Yoshi ](/docs/AutoInterface)|2025-07-25 => 25 July 2025 | [Interface](/docs/Categories/Interface) |
|206| [ShadowWriterBuilder by Stefan Stolz ](/docs/ShadowWriterBuilder)|2025-07-24 => 24 July 2025 | [Builder](/docs/Categories/Builder) |
diff --git a/v2/rscg_examples_site/src/components/HomepageFeatures/index.tsx b/v2/rscg_examples_site/src/components/HomepageFeatures/index.tsx
index 41df9e55d..837f0e14a 100644
--- a/v2/rscg_examples_site/src/components/HomepageFeatures/index.tsx
+++ b/v2/rscg_examples_site/src/components/HomepageFeatures/index.tsx
@@ -10,7 +10,7 @@ type FeatureItem = {
const FeatureList: FeatureItem[] = [
{
-title: '208 Examples (14 from MSFT)',
+title: '209 Examples (14 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 0357fc7ac..1a294963f 100644
--- a/v2/rscg_examples_site/static/exports/RSCG.json
+++ b/v2/rscg_examples_site/static/exports/RSCG.json
@@ -1665,6 +1665,14 @@
"Source": "https://github.com/oleg-shilo/AsyncIt",
"Category": "Async",
"AddedOn": "2025-07-26T00:00:00"
+ },
+ {
+ "Name": "ShadowWriterProjectInfo",
+ "Link": "https://ignatandrei.github.io/RSCG_Examples/v2/docs/ShadowWriterProjectInfo",
+ "NuGet": "https://www.nuget.org/packages/ShadowWriter/",
+ "Source": "https://github.com/StefanStolz/ShadowWriter",
+ "Category": "Builder",
+ "AddedOn": "2025-07-24T00: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 3535002f0..a6422d4c9 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/ShadowWriterProjectInfo.zip b/v2/rscg_examples_site/static/sources/ShadowWriterProjectInfo.zip
new file mode 100644
index 000000000..f292a35ad
Binary files /dev/null and b/v2/rscg_examples_site/static/sources/ShadowWriterProjectInfo.zip differ