> ## .NET SDK

> .NET SDK for Antithesis

> Fetch the complete documentation index at: https://antithesis.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

---

## Overview

The Antithesis .NET SDK offers classes for placing your .NET code under test and using Antithesis functionality. It is available on [Github](https://github.com/antithesishq/antithesis-sdk-net) and as a package on [NuGet](https://www.nuget.org/packages/Antithesis.SDK).

The Antithesis .NET SDK is intended for use with .NET 6 or higher. If you want to use a different version reach out to us at support@antithesis.com.

### Classes

The SDK provides three classes which each offer different functionality.

- The [Assert](/docs/generated/sdk/dotnet/api/Antithesis.SDK.Assert.html) class methods define [test properties](/docs/concepts/properties_assertions/properties/) about your software or workload.
- The [Random](/docs/generated/sdk/dotnet/api/Antithesis.SDK.Random.html) class is a subclass of `System.Random` that encapsulates Antithesis's deterministic and reproducible random number generator.
- The [Lifecycle](/docs/generated/sdk/dotnet/api/Antithesis.SDK.Lifecycle.html) class methods inform the Antithesis environment that particular test phases or milestones have been reached.

### Using the .NET SDK

The basic workflow for using the .NET SDK is:

1. Add a PackageReference to `Antithesis.SDK` to your .NET project file.

   E.g. `<PackageReference Include="Antithesis.SDK" Version="1.0.31" />`

2. Call SDK methods from your code.

   E.g. `Assert.Always(someCondition)`.

3. Build your .NET project.

4. Deploy your build: either to Antithesis or into production.

### SDK runtime behavior

The SDK is designed to have sensible fallback behavior that enables you to have a single build of your software that runs both inside and outside Antithesis.
One benefit of this is that [Sometimes Assertions](/docs/concepts/properties_assertions/sometimes_assertions/) continue to function outside Antithesis,
and can be quite useful for discovering what states of your program are encountered during real-world use.

Methods in the [Assert](/docs/generated/sdk/dotnet/api/Antithesis.SDK.Assert.html) and [Lifecycle](/docs/generated/sdk/dotnet/api/Antithesis.SDK.Lifecycle.html) classes have two modes for when your software is running **outside** Antithesis, including in production:

1. **Default**, where `Assert` and `Lifecycle` use local implementations of Antithesis functionality. However, the results will not be logged anywhere because no logfile has been specified.

   This mode is the default behavior.

2. **Default with logging**, which is the same as the above but logs output locally in [a structured JSON format](/docs/reference/sdk/fallback/schema/).

   This mode is selected at runtime by setting the environment variable `ANTITHESIS_SDK_LOCAL_OUTPUT` at program startup.
   This variable must be set to a filepath: a logfile will be created at this location. The file must be located inside an already-existing directory. You may supply either a relative or absolute path.

   E.g. set `ANTITHESIS_SDK_LOCAL_OUTPUT=assertions.json` prior to startup to output logs to `assertions.json`.

Methods in the [Random](/docs/generated/sdk/dotnet/api/Antithesis.SDK.Random.html) class always fall back upon the [System.Random](https://learn.microsoft.com/dotnet/api/system.random) class for entropy when run outside of Antithesis.
