ShadowWriter is a Roslyn Source Generator designed to simplify and automate aspects of .NET development.
It currently supports the following features:
Samples can be found in the Source-Code or in the Wiki.
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.
To create a null object implementation, simply add the [NullObject] attribute to your class:
[NullObject]
public partial class ImplementingMyInterface : IMyInterface
{
}Embeds values from the project file (*.csproj) directly into your source code.
This is useful for build metadata, version numbers, or project-specific configuration.
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 |
// 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}");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.
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.
To enable builder generation, simply annotate your partial record with the [Builder] attribute:
[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.
A variety of record types are supported:
// 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:
var builder = new WithBuilder.Builder();
builder.Number = 1;
var item = builder.Build();You can install ShadowWriter via NuGet:
dotnet package add ShadowWriterShadowWriter runs automatically during compilation. No manual setup is needed. Documentation and configuration options will be expanded in future versions.
This project is licensed under the MIT License.