JD.MSBuild.Fluent
1.1.2
See the version list below for details.
dotnet add package JD.MSBuild.Fluent --version 1.1.2
NuGet\Install-Package JD.MSBuild.Fluent -Version 1.1.2
<PackageReference Include="JD.MSBuild.Fluent" Version="1.1.2" />
<PackageVersion Include="JD.MSBuild.Fluent" Version="1.1.2" />
<PackageReference Include="JD.MSBuild.Fluent" />
paket add JD.MSBuild.Fluent --version 1.1.2
#r "nuget: JD.MSBuild.Fluent, 1.1.2"
#:package JD.MSBuild.Fluent@1.1.2
#addin nuget:?package=JD.MSBuild.Fluent&version=1.1.2
#tool nuget:?package=JD.MSBuild.Fluent&version=1.1.2
JD.MSBuild.Fluent
A strongly-typed, fluent DSL for authoring MSBuild .props, .targets, and SDK assets, then emitting them into the exact NuGet folder layout (build/, buildTransitive/, Sdk/<id>/...).
The goal is to make authoring MSBuild packages feel like writing normal C# - DRY, SOLID, refactorable - while still producing 100% standard MSBuild XML.
Documentation
- Full documentation
- API reference is generated from XML documentation comments.
Quick start
1. Install the package
<PackageReference Include="JD.MSBuild.Fluent" Version="*" />
2. Define your MSBuild assets
using JD.MSBuild.Fluent;
using JD.MSBuild.Fluent.Fluent;
namespace MySdk;
public static class DefinitionFactory
{
public static PackageDefinition Create() => Package.Define("MySdk")
.Props(p => p
.Property("MySdkEnabled", "true"))
.Targets(t => t
.Target("MySdk_Hello", target => target
.BeforeTargets("Build")
.Condition("'$(MySdkEnabled)' == 'true'")
.Message("Hello from MySdk")))
.Pack(o => { o.BuildTransitive = true; o.EmitSdk = true; })
.Build();
}
3. Generate assets automatically
MSBuild automatically generates assets during build - no CLI required!
Configure in your .csproj:
<PropertyGroup>
<JDMSBuildFluentGenerateEnabled>true</JDMSBuildFluentGenerateEnabled>
<JDMSBuildFluentDefinitionType>MySdk.DefinitionFactory</JDMSBuildFluentDefinitionType>
<JDMSBuildFluentOutputDir>$(MSBuildProjectDirectory)\msbuild</JDMSBuildFluentOutputDir>
</PropertyGroup>
Generated files are included in the build and packaged automatically:
build/<id>.propsbuild/<id>.targetsbuildTransitive/<id>.propsand.targets(if enabled)Sdk/<id>/Sdk.propsandSdk.targets(if enabled)
Optional: CLI for manual generation
Install the CLI tool globally:
dotnet tool install -g JD.MSBuild.Fluent.Cli
Generate manually:
jdmsbuild generate --assembly path/to/MySdk.dll --type MySdk.DefinitionFactory --method Create --output msbuild
Or generate the built-in example:
jdmsbuild generate --example --output artifacts/msbuild
Convert existing XML to fluent (scaffolding)
Migrate existing MSBuild XML files to fluent API:
# Install CLI if not already installed
dotnet tool install -g JD.MSBuild.Fluent.Cli
# Scaffold from existing XML
jdmsbuild scaffold --xml MyPackage.targets --output DefinitionFactory.cs --package-id MyCompany.MyPackage
This converts your XML into idiomatic fluent C# code that you can then customize and maintain.
Migration from XML
The scaffold command helps you migrate existing MSBuild packages:
- Start with your XML: Any
.propsor.targetsfile - Generate fluent code:
jdmsbuild scaffold --xml build/MyPackage.targets --output src/DefinitionFactory.cs - Review and adjust: The generated code is a starting point - refactor as needed
- Build: Generated assets are created automatically during build
Example:
Original XML (MyPackage.targets):
<Project>
<Target Name="Hello" BeforeTargets="Build">
<Message Text="Hello from MyPackage!" Importance="High" />
</Target>
</Project>
Generated fluent code:
public static class DefinitionFactory
{
public static PackageDefinition Create()
{
return Package.Define("MyPackage")
.Targets(t =>
{
t.Target("Hello", target =>
{
target.BeforeTargets("Build");
target.Message("Hello from MyPackage!", "High");
});
})
.Build();
}
}
Samples
samples/MinimalSdkPackagecontains a minimal, end-to-end definition and output.
Output layout
build/<id>.propsbuild/<id>.targets- (optional)
buildTransitive/... - (optional)
Sdk/<id>/Sdk.props - (optional)
Sdk/<id>/Sdk.targets
Determinism
The renderer canonicalizes common sources of MSBuild churn (property ordering, item metadata ordering, task parameter ordering) so that diffs remain meaningful.
| 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 was computed. 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.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.3.15 | 37 | 1/24/2026 |
| 1.3.14 | 31 | 1/24/2026 |
| 1.3.13 | 26 | 1/24/2026 |
| 1.3.12 | 27 | 1/24/2026 |
| 1.3.11 | 29 | 1/24/2026 |
| 1.3.10 | 34 | 1/20/2026 |
| 1.3.9 | 272 | 1/20/2026 |
| 1.3.8 | 71 | 1/20/2026 |
| 1.3.7 | 102 | 1/20/2026 |
| 1.3.6 | 68 | 1/20/2026 |
| 1.3.5 | 71 | 1/20/2026 |
| 1.3.4 | 122 | 1/19/2026 |
| 1.3.3 | 76 | 1/18/2026 |
| 1.3.2 | 81 | 1/18/2026 |
| 1.3.1 | 83 | 1/18/2026 |
| 1.3.0 | 79 | 1/18/2026 |
| 1.2.3 | 76 | 1/18/2026 |
| 1.2.2 | 78 | 1/18/2026 |
| 1.2.1 | 81 | 1/18/2026 |
| 1.2.0 | 81 | 1/18/2026 |
| 1.1.2 | 80 | 1/18/2026 |
| 1.1.1 | 76 | 1/18/2026 |
| 1.1.0 | 96 | 1/18/2026 |
| 1.0.2 | 111 | 1/18/2026 |
| 1.0.1 | 83 | 1/18/2026 |
| 1.0.0 | 81 | 1/18/2026 |
| 0.2.0 | 86 | 1/18/2026 |
| 0.1.1 | 81 | 1/17/2026 |
| 0.1.0 | 81 | 1/17/2026 |