dotnet/runtime

Json Configuration custom IFileProvider stopped working for .NET 5.0

Open

#47,455 opened on 2021年1月26日

GitHub で見る
 (8 comments) (0 reactions) (0 assignees)C# (5,445 forks)batch import
area-Extensions-Configurationbughelp wanted

Repository metrics

Stars
 (17,886 stars)
PR merge metrics
 (平均マージ 12d 11h) (30d で 661 merged PRs)

説明

We built support for encrypted appsettings.json in our app by using encrypted xml support built into .NET. To integrate this we use JsonConfigurationSource with a custom File Provider to return custom IFileInfo with CreateReadStream overriden to decrypt file. Like code below:

public static IConfigurationBuilder AddJsonFileProtectedByEncryptedXml(this IConfigurationBuilder builder, string path, bool optional = false, ILoggerFactory loggerFactory = null)
{
    var source = new JsonConfigurationSource
    {
        Path = path,
        // Specify file provider to use so that JsonConfigurationSource can read the decrypted form of config file.
        // Note config file does not need to be XML, only the container that contains the config file should be XML.
        FileProvider = new EncryptedXmlContainerFileProvider(loggerFactory),
        Optional = optional
    };
    builder.Add(source);
    return builder;
}

After upgrading to .NET 5.0 this stopped working.

Workaround: return null from PhysicalFilePath in custom IFileInfo. https://github.com/dotnet/runtime/blob/9b9303678de0f5573fef580f3f52404ea0a20dd4/src/libraries/Microsoft.Extensions.Configuration.FileExtensions/src/FileConfigurationProvider.cs#L87

コントリビューターガイド