---
title: Job Discovery and Assemblies
description: How DurableStack discovers jobs, and how to register jobs from a different project or assembly.
order: 32
---

## Overview

DurableStack discovers job types at startup.

By default, auto-discovery scans the application assembly (the assembly where your host starts).

If your jobs live in a different project/assembly, they will not be discovered unless you explicitly register that assembly.

## Common scenario

In many real-world solutions, the application host and job implementations are intentionally separated across projects. DurableStack starts from the host assembly, so default auto-discovery only sees job types loaded from that assembly. When jobs are defined in another referenced assembly, explicitly registering that assembly ensures they are discovered and registered at startup.

## Register jobs from another assembly

Use `AddDurableJobsFromAssembly` and point it to an assembly that contains your job types.

```csharp
services.AddDurableStack(options =>
{
    options.UsePostgres(DataSettingsManager.LoadSettings().ConnectionString);
});

services.AddDurableJobsFromAssembly(typeof(ClearCacheTask).Assembly);
```

`ClearCacheTask` is just an anchor type. DurableStack scans that assembly and discovers all matching job types there.

## Recommended pattern

- Keep your normal `AddDurableStack(...)` registration.
- Add one `AddDurableJobsFromAssembly(...)` call per external assembly that contains jobs.
- Use a stable, known job type from that project as the anchor (`typeof(SomeJob).Assembly`).

## Multiple assemblies

If jobs are split across projects, register each assembly explicitly.

```csharp
services.AddDurableJobsFromAssembly(typeof(BillingJobsAssemblyMarker).Assembly);
services.AddDurableJobsFromAssembly(typeof(ReportingJobsAssemblyMarker).Assembly);
```

## Troubleshooting checklist

- Confirm the jobs project is referenced by the host project.
- Confirm job types are public and implement DurableStack job contracts.
- Confirm registration runs during startup before worker execution begins.
- If no jobs appear, log startup and verify the external assembly registration path is executed.
