.net6.0 С# общий appsettings.json

Я работаю над многопользовательским решением .net6.0, в котором есть несколько встроенных проектов.

чтобы сократить объем обслуживания, я хочу централизовать и использовать/связать один файл appsettings.{environment}.JSON для всего решения, и чтобы каждый проект ссылался на соответствующие файлы.

поэтому в настоящее время я пытаюсь настроить это в консольном приложении (которое будет развернуто как веб-задание), и я получаю действительно странное поведение при запуске dotnet.

в этом консольном приложении я добавил путь к sharedsettings.json в файле проекта, т.е.

      <ItemGroup>
        <Content Include="..\SharedSettings\sharedsettings.development.json">
            <CopyToOutputDirectory>Always</CopyToOutputDirectory>
        </Content>
        <Content Include="..\SharedSettings\sharedsettings.production.json">
            <CopyToOutputDirectory>Always</CopyToOutputDirectory>
        </Content>
        <Content Include="..\SharedSettings\sharedsettings.staging.json">
            <CopyToOutputDirectory>Always</CopyToOutputDirectory>
        </Content>
</ItemGroup>

И когда я запускаю приложение с помощью кнопки воспроизведения, то есть с помощью сборки развертывания в Visual Studio, я могу прочитать содержимое файла и установить необходимые параметры конфигурации.

Однако, когда я запускаю dotnet, настройки приложения для требуемого пути JSON (из того же файла) возвращают значение null.

Это код в программе.cs

      //load the correct environment variables, i.e. Sevelopment / Staging / Production appsettings.JSON
string deployJSON = $"sharedsettings.{environment}.json";
string[] localPath = new string[] { "..", "SharedSettings", deployJSON };
var localJSON = Path.Combine(localPath);
Console.WriteLine(Directory.GetCurrentDirectory()); 

            Configuration = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile(localJSON, true, true)
                .AddJsonFile(deployJSON, true, true)
                .AddEnvironmentVariables()
                .Build();

string queueName = Configuration.GetValue<string>("ConnectionStrings:ServiceBusName");
string serviceBusConnection = Configuration.GetValue<string>("ConnectionStrings:ServiceBusConnectionString");

Console.WriteLine(queueName);
Console.WriteLine(serviceBusConnection);

Я использовал file.exists, чтобы подтвердить, что могу получить доступ к файлу, но я в тупике, почему результаты нулевые, когда я пытаюсь запустить dotnet.

1 ответ

Это поздний ответ, но, попробовав разные методы, я получил это в своем проекте..csprojфайл:

      <Target Name="CopyAppSettings" BeforeTargets="BeforeBuild">
    <Copy SourceFiles="path_to_shared_appsettings/appsettings.json" DestinationFolder="./" SkipUnchangedFiles="true" />
</Target>

При этом настройки приложения копируются в папку проекта каждый раз перед сборкой.

Другие вопросы по тегам