Skip to main content
When targeting netstandard2.0, the SDK injects polyfills for modern C# features. The polyfill source files are maintained in ANcpLua.Roslyn.Utilities as the single source of truth.
FeatureWhat it enables
Index / Rangearray[^1], array[1..3] syntax
IsExternalInitrecord types and init properties
Nullability attributes[NotNull], [MaybeNull], etc.
TimeProviderTestable time abstraction
LockSystem.Threading.Lock polyfill
Trim/AOT attributes[RequiresUnreferencedCode], etc.
String extensionsstring.Contains(StringComparison)

Opt-out Control

All polyfills are enabled by default. Disable individual categories or all at once:
<PropertyGroup>
  <!-- Disable a specific polyfill -->
  <InjectTimeProviderPolyfill>false</InjectTimeProviderPolyfill>
  <InjectLockPolyfill>false</InjectLockPolyfill>

  <!-- Disable ALL polyfills -->
  <InjectAllPolyfillsOnLegacy>false</InjectAllPolyfillsOnLegacy>
</PropertyGroup>
See Polyfills Reference for the complete list of available polyfills and opt-out properties.
Polyfills are only injected for netstandard2.0 / netstandard2.1 targets. .NET 10 projects donโ€™t need them.