Bullseye 6.1.0 (original) (raw)

Bullseye

NuGet version

CI CodeQL analysis InferSharp Lint Spell check

Bullseye is a .NET library that runs a target dependency graph.

Bullseye is primarily designed as a build tool for .NET projects, and is usually used together with SimpleExec, but Bullseye targets can do anything. They are not restricted to building .NET projects.

Platform support: .NET 8.0 and later.

Quick start

using static Bullseye.Targets;  
using static SimpleExec.Command;  
Target("build", () => RunAsync("dotnet", "build --configuration Release --nologo --verbosity quiet"));  
Target("test", dependsOn: ["build"], () => RunAsync("dotnet", "test --configuration Release --no-build --nologo --verbosity quiet"));  
Target("default", dependsOn: ["test"]);  
await RunTargetsAndExitAsync(args, ex => ex is SimpleExec.ExitCodeException);  

Voilà! You've just written and run your first Bullseye build program. You will see output similar to:

Bullseye quick start output

For help, run dotnet run --project targets --help.

Sample wrapper scripts

#!/usr/bin/env bash  
set -euo pipefail  
dotnet run --project targets -- "$@"  
@echo Off  
dotnet run --project targets -- %*  

Enumerable inputs

For example, you may want to run your test projects one by one, so that the timing of each one and which one, if any, failed, is displayed in the Bullseye build summary:

Target(
    "test",
    dependsOn: ["build"],
    forEach: ["./FooTests.Acceptance", "./FooTests.Performance"],
    project => RunAsync($"dotnet", $"test {project} --configuration Release --no-build --nologo --verbosity quiet"));
dotnet run -- test
Bullseye enumerable inputs output

Command-line arguments

Generally, all the command-line arguments passed to Program.cs should be passed along to Bullseye, as shown in the quick start above (RunTargetsAndExitAsync(args);). This is because Bullseye effectively provides a command-line interface, with options for displaying a list of targets, performing dry runs, suppressing colour, and more. For full details of the command-line options, run your targets project supplying the --help (-h/-?) option:

dotnet run --project targets -- --help
./build --help
./build.cmd --help

You can also handle custom arguments in Program.cs, but you should ensure that only valid arguments are passed along to Bullseye and that the help text contains both your custom arguments and the arguments supported by Bullseye. A good way to do this is to use a command-line parsing package to define your custom arguments, and to provide translation between the package and Bullseye. For example, see the test projects for:

Non-static API

For most cases, the static API described above is sufficient. For more complex scenarios where a number of target collections are required, the non-static API may be used.

var targets1 = new Targets();
targets1.Add("foo", () => Console.Out.WriteLine("foo1"));

var targets2 = new Targets();
targets2.Add("foo", () => Console.Out.WriteLine("foo2"));

await targets1.RunWithoutExitingAsync(args);
await targets2.RunWithoutExitingAsync(args);

NO_COLOR

Bullseye supports NO_COLOR.

Who's using Bullseye?

To name a few:

Feel free to send a pull request to add your repository or organisation to this list!


Target by Franck Juncker from the Noun Project.

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible. 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 is compatible. 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 is compatible. 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.

NuGet packages (8)

Showing the top 5 NuGet packages that depend on Bullseye:

Package Downloads
Apprio.Enablement.Infrastructure Package Description 602.4K
Faithlife.Build A build automation system using C# build scripts. 469.6K
Apprio.Azure.Infrastructure Package Description 72.5K
Dex.IdentityServer4 OpenID Connect and OAuth 2.0 Framework for ASP.NET Core 25.3K
Xenial.Beer Beer - Delicious dotnet build tools 19.0K

GitHub repositories (48)

Showing the top 20 popular GitHub repositories that depend on Bullseye:

Repository Stars
xunit/xunit xUnit.net is a free, open source, community-focused unit testing tool for .NET. 4.6K
elastic/elasticsearch-net This strongly-typed, client library enables working with Elasticsearch. It is the official client maintained and supported by Elastic. 3.6K
aaubry/YamlDotNet YamlDotNet is a .NET library for YAML 2.8K
adamhathcock/sharpcompress SharpCompress is a fully managed C# library to deal with many compression types and formats. 2.6K
AppMetrics/AppMetrics App Metrics is an open-source and cross-platform .NET library used to record and report metrics within an application. 2.2K
gothinkster/aspnetcore-realworld-example-app ASP.NET Core backend implementation for RealWorld 2.1K
servicetitan/Stl.Fusion Build real-time apps (Blazor included) with less than 1% of extra code responsible for real-time updates. Host 10-1000x faster APIs relying on transparent and nearly 100% consistent caching. We call it DREAM, or Distributed REActive Memoization, and it's here to turn real-time on! 1.9K
FakeItEasy/FakeItEasy The easy mocking library for .NET 1.8K
ProxyKit/ProxyKit A toolkit to create code-first HTTP reverse proxies on ASP.NET Core 1.1K
DuendeArchive/IdentityModel .NET standard helper library for claims-based identity, OAuth 2.0 and OpenID Connect. 1.1K
adamralph/minver 🏷 Minimalist .NET packages, developed by humans, for versioning software or content using Git tags. 992
SnapXL/SnapX SnapX is a free, open-source, cross-platform tool that lets you capture or record any area of your screen and instantly share it with a single keypress. Upload images, videos, text, and more to multiple supported destinations—all with ease. ShareX fork 945
machine/machine.specifications Machine.Specifications is a Context/Specification framework for .NET that removes language noise and simplifies tests. 900
cofoundry-cms/cofoundry Cofoundry is an extensible and flexible .NET Core CMS & application framework focusing on code first development 897
adamralph/simple-exec 🏃 A .NET library, developed by humans, for running external commands. 799
DuendeArchive/IdentityModel.OidcClient Certified C#/NetStandard OpenID Connect Client Library for native mobile/desktop Applications (RFC 8252) 614
JasperFx/lamar Fast Inversion of Control Tool and Successor to StructureMap 605
elastic/apm-agent-dotnet 592
Particular/Workshop SOA Done Right 590
Librelancer/Librelancer A re-implementation of Freelancer 583

Include prerelease

Include vulnerable

Include deprecated

Version Downloads Last Updated
6.2.0-rc.1 460 5/14/2026
6.2.0-alpha.3 241 12/27/2025
6.2.0-alpha.2 163 12/25/2025
6.2.0-alpha.1 170 12/25/2025
6.1.0 196,681 12/27/2025
6.1.0-rc.2 82 12/27/2025
6.1.0-rc.1 1,054 12/21/2025
6.0.0 320,833 4/2/2025
6.0.0-beta.2 2,374 3/10/2025
6.0.0-beta.1 699 2/23/2025
5.0.0 635,205 1/15/2024
5.0.0-rc.1 707 12/21/2023
5.0.0-alpha.2 1,013 9/25/2023
5.0.0-alpha.1 1,131 6/9/2023
4.2.1 299,070 1/24/2023
4.2.1-rc.1 708 12/3/2022
4.2.0 76,520 11/9/2022
4.2.0-beta.1 550 10/30/2022
4.1.1 49,266 10/22/2022
4.1.0 1,370 10/16/2022