Files
pgsql-jellyfin/docs/WARNING_SUPPRESSIONS.md
T
wjones 77e30685bb Complete multi-instance support: Phases 3–6 & deployment
- Implements Phases 3–6: session isolation, cache coordination, primary election, and file system monitor coordination for Jellyfin with PostgreSQL.
- Adds new database entities (Instance, DistributedLock, FileSystemChange) and EF model configurations.
- Includes SQL migration scripts and EF migration for all required tables, columns, and helper functions.
- Updates Device entity and JellyfinDbContext for multi-instance tracking.
- Integrates new DI services for instance registry, distributed locks, cache coordinator, and primary election.
- Adds publishing profiles (Win/Linux/FrameworkDependent) and automation script for deployment.
- Extensive documentation for architecture, setup, and publishing.
- All changes are backward compatible and build successfully.
2026-03-05 16:10:26 -05:00

4.1 KiB

Warning Suppressions for .NET 11 Trimming

Overview

The Jellyfin.Server project includes warning suppressions for .NET native AOT and trimming compatibility. These suppressions are added in Jellyfin.Server/Jellyfin.Server.csproj.

Suppressed Warnings

The following trimming warnings are suppressed:

<NoWarn>$(NoWarn);IL2026;IL2072;IL2075</NoWarn>

IL2026 - RequiresUnreferencedCode

Description: Methods requiring unreferenced code (reflection, serialization) being called

Affected Code:

  • XML serialization in migration routines (CreateNetworkConfiguration.cs, MigrateMusicBrainzTimeout.cs)
  • JSON serialization in startup helpers (StartupHelpers.cs)
  • Assembly reflection in migration service (JellyfinMigrationService.cs)
  • Swagger/OpenAPI type inspection (AdditionalModelFilter.cs)

Why Suppressed: These are existing migration and configuration routines that require reflection for dynamic serialization and discovery. The code paths are well-tested and do not affect runtime stability.

IL2072 - DynamicallyAccessedMembers Mismatch

Description: Type passed to parameter requiring certain members cannot be guaranteed

Affected Code:

  • Dynamic type registration in CoreAppHost.cs
  • Plugin loading and assembly scanning

Why Suppressed: The dynamic type registration is part of Jellyfin's plugin architecture and has been stable in production. The code validates types at runtime and handles errors gracefully.

IL2075 - DynamicallyAccessedMembers Mismatch

Description: Similar to IL2072 but for return values

Affected Code:

  • Type reflection in OpenAPI documentation generation (AdditionalModelFilter.cs)
  • Assembly scanning utilities

Why Suppressed: These are development-time tools (API documentation) and controlled reflection scenarios that don't affect core functionality.

Impact on Multi-Instance Implementation

Important: None of the suppressed warnings are related to the multi-instance clustering implementation (Phases 1-6). All new code in the following namespaces compiles without any warnings:

  • Jellyfin.Server.Implementations.Clustering.*
  • Jellyfin.Database.Implementations.Entities.FileSystemChange
  • Jellyfin.Database.Implementations.ModelConfiguration.FileSystemChangeConfiguration

The multi-instance code is fully AOT/trimming compatible.

Verification

Build verification shows:

  • Debug build: Success (all 24 projects)
  • Release build: Success (all 24 projects)
  • Publish: Success with suppressions enabled

Alternative Approaches Considered

  1. Per-File Suppressions: Using #pragma warning disable in each affected file

    • Rejected: Would require modifying many existing files and makes suppressions less visible
  2. Attribute-Based Suppressions: Using [UnconditionalSuppressMessage] attributes

    • Rejected: Same issue as #1, plus adds attribute noise to code
  3. Fixing Root Causes: Rewriting XML/JSON serialization and migration code to avoid reflection

    • Rejected: Major refactoring effort that doesn't provide immediate value and risks breaking migrations

Future Work

As .NET evolves and trimming becomes more sophisticated:

  1. Monitor Warning Updates: Check if Microsoft provides better suppression patterns
  2. Incremental Fixes: Address warnings in new code; avoid adding to suppressed categories
  3. Source Generators: Consider using source generators for serialization in new features
  4. Migration Cleanup: Eventually rewrite or remove SQLite migration routines

References


Last Updated: Phase 6 completion
Status: All builds passing with suppressions enabled