Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,28 @@ config.Bind(sample);

If using 'snake_case' keys, YOU MUST make sure that your C# variables are 'PascalCase' to ensure proper binding.

## NativeAOT

This library is annotated as NativeAOT compatible (`IsAotCompatible`) and has no runtime reflection dependencies. TOML parsing goes through a source-generated Tomlyn `TomlSerializerContext`, so it works when reflection-based serialization is disabled (`PublishAot=true`).

When publishing with `PublishAot=true`, avoid reflection-based configuration binding:

```cs
// Not AOT safe
configuration.Bind(options);

// AOT safe
var value = configuration["Server:Port"];
```

To bind values to strongly typed options under NativeAOT, opt into the configuration binder source generator:

```xml
<PropertyGroup>
<EnableConfigurationBindingGenerator>true</EnableConfigurationBindingGenerator>
</PropertyGroup>
```

## Alternatives and benchmarks

Another [possibly slightly faster](https://github.com/bugproof/TomlLibrariesBenchmark) alternative is [Tommy.Extensions.Configuration](https://github.com/dezhidki/Tommy/tree/master/Tommy.Extensions.Configuration).
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public static IDictionary<string, string> Parse(Stream input)
private IDictionary<string, string> ParseStream(Stream input)
{
using var reader = new StreamReader(input);
var model = TomlSerializer.Deserialize<TomlTable>(reader.ReadToEnd())
var model = TomlSerializer.Deserialize<TomlTable>(reader.ReadToEnd(), TomlModelSerializerContext.Default)
?? throw new FormatException("TOML deserialization returned null");
VisitObject(model);
return _data;
Expand Down
10 changes: 10 additions & 0 deletions Tomlyn.Extensions.Configuration/TomlModelSerializerContext.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
using Tomlyn.Model;
using Tomlyn.Serialization;

namespace Tomlyn.Extensions.Configuration
{
[TomlSerializable(typeof(TomlTable))]
internal partial class TomlModelSerializerContext : TomlSerializerContext
{
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,12 @@
<PackageLicenseExpression>MIT</PackageLicenseExpression>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<LangVersion>default</LangVersion>
<IsAotCompatible>true</IsAotCompatible>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="10.0.6" />
<PackageReference Include="Tomlyn" Version="2.3.0" />
<PackageReference Include="Tomlyn" Version="2.10.1" />
</ItemGroup>

</Project>