ND0004: Avoid runtime expression compilation

Summary

ND0004 warns when code calls Expression<TDelegate>.Compile() or LambdaExpression.Compile().

Why this matters

  • Runtime expression compilation depends on runtime code generation paths.
  • NativeAOT and aggressive trimming scenarios are designed around compile-time closure.
  • Query pipelines should favor compile-time generated translation instead of runtime delegate compilation.

Trigger examples

Expression<Func<int>> expression = () => 42;
var compiled = expression.Compile();
LambdaExpression expression = (Expression<Func<int>>)(() => 42);
var compiled = expression.Compile();

Prefer one of these patterns:

  • Use compile-time generated query/predicate helpers.
  • Keep expression trees as data for translation rather than compiling to delegates at runtime.
  • Replace runtime compilation with explicit typed delegates when values are known at compile time.

Diagnostic details

  • ID: ND0004
  • Category: NativeData.Compatibility
  • Default severity: Warning
  • Message: Runtime expression compilation via Compile() is not AOT/trimming-safe

Suppression guidance

Suppress only when runtime compilation is unavoidable and deployment targets are explicitly validated.