.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>
При этом настройки приложения копируются в папку проекта каждый раз перед сборкой.