
build-and-test
How to build and test .NET projects in the Agent Framework repository. Use this when verifying or testing changes.
- Installs
- 41
- Last 24h
- —
- Trending rank
- —
- Security
- Not audited
Install
Works with every agent the skills CLI supports.
npx skills add https://github.com/microsoft/agent-framework --skill build-and-test- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads build-and-test automatically when relevant.
- 03
Review the result
The agent follows the SKILL.md steps, scripts and references bundled with the skill.
SKILL.md
The instructions your agent reads when the skill is triggered.
- Only UnitTest projects need to be run locally; IntegrationTests require external dependencies.
- See
../project-structure/SKILL.mdfor project structure details.
Build, Test, and Lint Commands
# From dotnet/ directory
dotnet restore --tl:off # Restore dependencies for all projects
dotnet build --tl:off # Build all projects
dotnet test # Run all tests
dotnet format # Auto-fix formatting for all projects
# Build/test/format a specific project (preferred for isolated/internal changes)
dotnet build src/Microsoft.Agents.AI.<Package> --tl:off
dotnet test --project tests/Microsoft.Agents.AI.<Package>.UnitTests
dotnet format src/Microsoft.Agents.AI.<Package>
# Run a single test
# Replace the filter values with the appropriate assembly, namespace, class, and method names for the test you want to run and use * as a wildcard elsewhere, e.g. "/*/*/HttpClientTests/GetAsync_ReturnsSuccessStatusCode"
# Use `--ignore-exit-code 8` to avoid failing the build when no tests are found for some projects
dotnet test --filter-query "/<assemblyFilter>/<namespaceFilter>/<classFilter>/<methodFilter>" --ignore-exit-code 8
# Run unit tests only
# Use `--ignore-exit-code 8` to avoid failing the build when no tests are found for integration test projects
dotnet test --filter-query "/*UnitTests*/*/*/*" --ignore-exit-code 8
Use --tl:off when building to avoid flickering when running commands in the agent.
Speeding Up Builds and Testing
The full solution is large. Use these shortcuts:
| Change type | What to do |
|---|---|
| Isolated/Internal logic | Build only the affected project and its *.UnitTests project. Fix issues, then build the full solution and run all unit tests. |
| Public API surface | Build the full solution and run all unit tests immediately. |
Example: Building a single code project for all target frameworks
# From dotnet/ directory
dotnet build ./src/Microsoft.Agents.AI.Abstractions
Example: Building a single code project for just .NET 10.
# From dotnet/ directory
dotnet build ./src/Microsoft.Agents.AI.Abstractions -f net10.0
Example: Running tests for a single project using .NET 10.
# From dotnet/ directory
dotnet test --project ./tests/Microsoft.Agents.AI.Abstractions.UnitTests -f net10.0
Example: Running a single test in a specific project using .NET 10. Provide the full namespace, class name, and method name for the test you want to run:
# From dotnet/ directory
dotnet test --project ./tests/Microsoft.Agents.AI.Abstractions.UnitTests -f net10.0 --filter-query "/*/Microsoft.Agents.AI.Abstractions.UnitTests/AgentRunOptionsTests/CloningConstructorCopiesProperties"
Multi-target framework tip
Most projects target multiple .NET frameworks. If the affected code does not use #if directives for framework-specific logic, pass -f net10.0 to speed up building and testing.
Package Restore tip
dotnet build will try and restore packages for all projects on each build, which can be slow.
Unless packages have been changed, or it's the first time building the solution, add --no-restore to the build command to skip this step and speed up builds.
Just remember to run dotnet restore after pulling changes, making changes to project references, or when building for the first time.
Testing on Linux tip
Unit tests target both .NET Framework as well as .NET Core. When running on Linux, only the .NET Core tests can be run, as .NET Framework is not supported on Linux.
To run only the .NET Core tests, use the -f net10.0 option with dotnet test.
Microsoft Testing Platform (MTP)
Tests use the Microsoft Testing Platform via xUnit v3. Key differences from the legacy VSTest runner:
-
dotnet testrequires--projectto specify a test project directly (positional arguments are no longer supported). -
Test output uses the MTP format (e.g.,
[✓112/x0/↓0]progress andTest run summary: Passed!). -
TRX reports use
--report-xunit-trxinstead of--logger trx. -
Code coverage uses
Microsoft.Testing.Extensions.CodeCoveragewith--coverage --coverage-output-format cobertura. -
Running a test project directly is supported via
dotnet run --project <test-project>. This bypasses thedotnet testinfrastructure and runs the test executable directly with the MTP command line. -
Running tests across the solution with a filter may cause some projects to match zero tests, which MTP treats as a failure (exit code 8). Use
--ignore-exit-code 8to suppress this:
# Run all unit tests across the solution, ignoring projects with no matching tests
dotnet test --solution ./agent-framework-dotnet.slnx --no-build -f net10.0 --ignore-exit-code 8
- Running tests with
--solutionfor a specific TFM requires all projects in the solution to support that TFM. Not all projects target every framework (e.g., some arenet10.0-only). Use./dotnet/eng/scripts/New-FilteredSolution.ps1to generate a filtered solution:
# Generate a filtered solution for net472 and run tests
$filtered = ./dotnet/eng/scripts/New-FilteredSolution.ps1 -Solution dotnet/agent-framework-dotnet.slnx -TargetFramework net472
dotnet test --solution $filtered --no-build -f net472 --ignore-exit-code 8
# Exclude samples and keep only unit test projects
./dotnet/eng/scripts/New-FilteredSolution.ps1 -Solution dotnet/agent-framework-dotnet.slnx -TargetFramework net10.0 -ExcludeSamples -TestProjectNameFilter "*UnitTests*" -OutputPath dotnet/filtered-unit.slnx
# Run tests via dotnet test (uses MTP under the hood)
dotnet test --project ./tests/Microsoft.Agents.AI.UnitTests -f net10.0
# Run tests with code coverage (Cobertura format)
dotnet test --project ./tests/Microsoft.Agents.AI.UnitTests -f net10.0 --coverage --coverage-output-format cobertura --coverage-settings ./tests/coverage.runsettings
# Run tests directly via dotnet run (MTP native command line)
dotnet run --project ./tests/Microsoft.Agents.AI.UnitTests -f net10.0
# Show MTP command line help
dotnet run --project ./tests/Microsoft.Agents.AI.UnitTests -f net10.0 -- -?
FAQ
What does the build-and-test skill do?
How to build and test .NET projects in the Agent Framework repository. Use this when verifying or testing changes.
How do I install build-and-test?
Run npx skills add https://github.com/microsoft/agent-framework --skill build-and-test in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/build-and-test/ (personal) or .claude/skills/build-and-test/ (project).
Which AI agents can use build-and-test?
Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.
Is build-and-test safe to install?
No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.
Who maintains build-and-test?
It is published by microsoft in microsoft/agent-framework, and it is an official skill from the maker of the technology it covers. It has 41 recorded installs.
More from microsoft/agent-framework
python-code-quality
microsoft/agent-framework
Code quality checks, linting, formatting, and type checking commands for the Agent Framework Python codebase. Use this when running checks, fixing lint errors, or troubleshooting CI failures.
python-development
microsoft/agent-framework
Coding standards, conventions, and patterns for developing Python code in the Agent Framework repository. Use this when writing or modifying Python source files in the python/ directory.
Popular testing & qa skills
tdd
mattpocock/skills
Test-driven development. Use when the user wants to build features or fix bugs test-first, mentions "red-green-refactor", or wants integration tests.
grilling
mattpocock/skills
Grill the user relentlessly about a plan, decision, or idea. Use when the user wants to stress-test their thinking, or uses any 'grill' trigger phrases.
migrate-to-shoehorn
mattpocock/skills
Migrate test files from as type assertions to @total-typescript/shoehorn. Use when user mentions shoehorn, wants to replace as in tests, or needs partial test data.
run-train
lllllllama/rigorpilot-skills
Rigor Train skill for deep learning research repositories. Use when a documented or selected training command should be run conservatively for startup verification, short-run verification, full kickoff, or resume, with command, config, seed, log, checkpoint, status, and metric evidence written to standardized trainoutputs/. Do not use for environment setup, exploratory sweeps, speculative idea implementation, or end-to-end orchestration.
test-driven-development
obra/superpowers
Use when implementing any feature or bugfix, before writing implementation code
finishing-a-development-branch
obra/superpowers
Use when implementation is complete, all tests pass, and you need to decide how to integrate the work