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();
Recommended fixes
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.