--- description: Create a new auto-instrumentation integration --- Create a new auto-instrumentation integration for the Datadog .NET tracer. Follow these steps: 1. **Gather requirements**: - Target library name and NuGet package - Supported version range - Methods to instrument (assembly, type, method signatures) - Integration category (e.g., HTTP, Database, Messaging, etc.) 2. **Create integration class**: - Location: `tracer/src/Datadog.Trace/ClrProfiler/AutoInstrumentation//.cs` - Add `[InstrumentMethod]` attribute with: - `AssemblyName`: Target assembly - `TypeName`: Fully qualified type name - `MethodName`: Method to instrument - `ReturnTypeName`: Method return type - `ParameterTypeNames`: Array of parameter types - `MinimumVersion` and `MaximumVersion`: Version range - `IntegrationName`: Unique integration identifier - Implement `OnMethodBegin` (for method entry) - Implement `OnMethodEnd` or `OnAsyncMethodEnd` (for method exit) 3. **Use duck typing for third-party types**: - Define interface with required properties/methods - Use `where TTarget : IMyInterface, IDuckType` constraint - Or use `target.DuckCast()` for runtime casting 4. **Add integration tests**: - Location: `tracer/test/Datadog.Trace.ClrProfiler.IntegrationTests//` - Create sample application: `tracer/test/test-applications/integrations//` - Test multiple library versions (package_versions.props) - Verify spans are created with correct tags 5. **Generate boilerplate**: - Run: `./tracer/build.ps1 RunInstrumentationGenerator` 6. **Update documentation**: - Add integration to supported libraries list if needed Reference files: - `docs/development/AutomaticInstrumentation.md` - Complete integration guide - `docs/development/DuckTyping.md` - Duck typing patterns - `tracer/src/Datadog.Trace/ClrProfiler/AutoInstrumentation/` - Existing integrations After creating: - Run the instrumentation generator - Build the tracer - Run integration tests - Verify spans in test output