Devlead.SourcePack
2026.8.25.55
Prefix Reserved
dotnet add package Devlead.SourcePack --version 2026.8.25.55
NuGet\Install-Package Devlead.SourcePack -Version 2026.8.25.55
<PackageReference Include="Devlead.SourcePack" Version="2026.8.25.55"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets> </PackageReference>
<PackageVersion Include="Devlead.SourcePack" Version="2026.8.25.55" />
<PackageReference Include="Devlead.SourcePack"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets> </PackageReference>
paket add Devlead.SourcePack --version 2026.8.25.55
#r "nuget: Devlead.SourcePack, 2026.8.25.55"
#:package Devlead.SourcePack@2026.8.25.55
#addin nuget:?package=Devlead.SourcePack&version=2026.8.25.55
#tool nuget:?package=Devlead.SourcePack&version=2026.8.25.55
Devlead.SourcePack
Opinionated MSBuild package for authoring source NuGet packages using standard SDK dotnet pack.
Features
- Ships
.csfiles undercontentFiles/cs/{tfm}/...withBuildAction=Compile - Optional
build/{tfm}/*.propsand*.targetsviaSourcePackFile - Optional
SourcePackBundlefor meta-packages that re-export dependency source/build assets and promote that package's direct NuGet dependencies into the packed nuspec - Per-target-framework dependencies from plain
PackageReferenceitems (plus promoted direct deps from bundled packages) - No
lib/output (IncludeBuildOutput=falseby default) - Works with class libraries, console apps, and Azure Functions source projects
Installation
Add a development dependency to the project you want to pack:
<PackageReference Include="Devlead.SourcePack" PrivateAssets="all" />
Quick start
<PropertyGroup>
<TargetFrameworks>net8.0;net9.0;net10.0</TargetFrameworks>
<SourcePackRoot>Devlead/MyPackage</SourcePackRoot>
<IsPackable>true</IsPackable>
</PropertyGroup>
<PackageReference Include="Devlead.SourcePack" PrivateAssets="all" />
<SourcePackFile Include="MyPackage.props" Kind="Build" />
<SourcePackFile Include="MyPackage.targets" Kind="Build" />
<SourcePackFile Include="../../README.md" Kind="Metadata" />
Pack in Release:
dotnet pack -c Release
For multi-target projects (TargetFrameworks), pack single-threaded to avoid duplicate contentFiles entries:
dotnet pack -c Release -- /m:1
Devlead.SourcePack sets BuildInParallel=false as an additional safeguard.
Properties
| Property | Default | Description |
|---|---|---|
EnableSourcePack |
true |
Opt out by setting false |
SourcePackRoot |
(required for auto sources) | Root folder under contentFiles/cs/{tfm}/ |
SourcePackPackConfigurations |
Release |
Configurations that pack sources |
SourcePackIncludeGeneratedUsings |
true |
Pack *.GlobalUsings.g.cs from obj/ |
SourcePackFlowBuildAssets |
true |
Before pack, sets suppressParent=None on packed dependencies so the nuspec does not get exclude="Build,Analyzers". Set false to keep SDK pack defaults. |
SourcePackBundle
Re-export source and build assets from a restored dependency package into your nupkg (meta-packages / vendoring), and promote that package's direct NuGet dependencies into your packed nuspec.
Declare a matching PackageReference so NuGet can restore the package (version via CPM PackageVersion or Version / VersionOverride). When a SourcePackBundle matches that id, SourcePack applies PrivateAssets="all", GeneratePathProperty="true", and Pack="false" if those are unset:
<PackageReference Include="Devlead.Console" />
<SourcePackBundle Include="Devlead.Console"
PackagePathPrefix="Devlead/Advanced" />
By default, the bundled package's direct NuGet dependencies are promoted into this package's nuspec (for example Spectre.Console.Cli and Microsoft.Extensions.Logging.Console when bundling Devlead.Console). The bundled package id itself is not listed as a dependency (Pack="false"). Set PromoteDependencies="false" to skip promotion.
| Metadata | Default | Description |
|---|---|---|
PackagePathPrefix |
(empty) | Prefix under contentFiles/cs/{tfm}/ for bundled .cs files |
IncludeBuildAssets |
true |
Copy build/{tfm}/*.props and *.targets from the dependency |
PromoteDependencies |
true |
Promote the bundled package's direct NuGet dependencies into this package's nuspec |
PackagePathProperty |
Pkg{Id} |
Override the Pkg... MSBuild property name (rarely needed) |
Example output paths when bundling Devlead.Console with prefix Devlead/Advanced:
contentFiles/cs/net8.0/Devlead/Advanced/Devlead/Console/Program.csbuild/net8.0/Devlead.Console.props
See src/Devlead.SourcePack.Sample.Advanced for a full in-repo example.
SourcePackFile kinds
| Kind | Package path |
|---|---|
Source |
contentFiles/cs/{tfm}/{SourcePackRoot}/... |
Build |
build/{tfm}/{filename} |
Metadata |
package root (README, icon, etc.) |
Build
dotnet run --file cake.cs
Example projects
- Devlead.Console (also bundled as an example by
Devlead.SourcePack.Sample.Advanced) - Devlead.Testing.MockHttp
License
MIT
Learn more about Target Frameworks and .NET Standard.
This package has 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 |
|---|---|---|
| 2026.8.25.55 | 183 | 8/25/2026 |
| 2026.8.13.49 | 189 | 8/13/2026 |
| 2026.7.14.33 | 392 | 7/14/2026 |
| 2026.6.29.20 | 321 | 6/29/2026 |
| 2026.6.25.12 | 150 | 6/25/2026 |
| 2026.6.25.9 | 115 | 6/25/2026 |
| 2026.6.23.3 | 258 | 6/23/2026 |