Ling.FluentValidation.Annotations
1.0.0-preview.2
dotnet add package Ling.FluentValidation.Annotations --version 1.0.0-preview.2
NuGet\Install-Package Ling.FluentValidation.Annotations -Version 1.0.0-preview.2
<PackageReference Include="Ling.FluentValidation.Annotations" Version="1.0.0-preview.2" />
<PackageVersion Include="Ling.FluentValidation.Annotations" Version="1.0.0-preview.2" />
<PackageReference Include="Ling.FluentValidation.Annotations" />
paket add Ling.FluentValidation.Annotations --version 1.0.0-preview.2
#r "nuget: Ling.FluentValidation.Annotations, 1.0.0-preview.2"
#:package Ling.FluentValidation.Annotations@1.0.0-preview.2
#addin nuget:?package=Ling.FluentValidation.Annotations&version=1.0.0-preview.2&prerelease
#tool nuget:?package=Ling.FluentValidation.Annotations&version=1.0.0-preview.2&prerelease
Ling.FluentValidation.Annotations
Ling.FluentValidation.Annotations contains the declaration-only API for marking DTOs and describing validation rules. It does not depend on FluentValidation, so shared Contracts projects do not acquire a validation-runtime dependency.
The package also includes Roslyn analyzers and code fixes that report invalid rule usage while editing and building.
Installation
Install the package in the project that owns request and DTO types:
dotnet add package Ling.FluentValidation.Annotations --prerelease
Declare a validation contract
Generation is explicit. A type with rules must be marked with [GenerateValidator]:
using Ling.FluentValidation.Annotations;
namespace MyApplication.Contracts;
[GenerateValidator]
public sealed record CreateOrderRequest
{
[NotEmpty]
[Length(3, 100)]
public string Name { get; init; } = string.Empty;
[InclusiveBetween(1, 100)]
public int Quantity { get; init; }
}
The analyzer reports rules placed on an unmarked type and offers a code fix that adds [GenerateValidator].
Rules
Annotations cover value-based, type-independent rules, including:
- null and empty checks;
- length and regular-expression checks;
- equality, ordering, and inclusive or exclusive ranges;
- allowed and denied values;
- email, phone, URL, credit card, Base64, file extension, enum, and enum-name checks.
Standard System.ComponentModel.DataAnnotations validation attributes are also recognized by the generator. Rule-specific error messages, codes, severity, display names, and supported conditional members can be configured on Ling attributes.
Rules that depend on services, another validator, or application behavior belong in a partial validator in the receiving project rather than in the contract assembly.
Select a source assembly
The project that receives generated validators explicitly selects external contract assemblies:
using Ling.FluentValidation.Annotations;
using MyApplication.Contracts;
[assembly: GenerateValidatorsFromAssemblyContaining(typeof(CreateOrderRequest))]
On .NET 7 or later, the generic form can be used to omit typeof:
[assembly: GenerateValidatorsFromAssemblyContaining<CreateOrderRequest>]
Configure generated validators
Apply options to the receiving assembly:
[assembly: ValidatorGenerationOptions(
Namespace = "MyApplication.Validation",
Visibility = GeneratedValidatorVisibility.Public,
IsSealed = true,
ClassLevelCascadeMode = ValidationCascadeMode.Continue,
RuleLevelCascadeMode = ValidationCascadeMode.Stop)]
Target frameworks
netstandard2.0provides the base declaration API.net7.0adds generic attribute forms that only simplifytypeofsyntax.
Newer applications automatically select the compatible asset.
Related packages
Ling.FluentValidationprovides the source generator, runtime rule implementations, and FluentValidation integration.
License
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 is compatible. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- No dependencies.
-
net7.0
- No dependencies.
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Ling.FluentValidation.Annotations:
| Package | Downloads |
|---|---|
|
Ling.FluentValidation
Attribute-driven FluentValidation source generation, runtime validators, and rule extensions. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.0.0-preview.2 | 76 | 8/31/2026 |
| 1.0.0-preview.1 | 67 | 8/31/2026 |