.net6.0 c# 共享 appsettings.json
.net6.0 c# shared appsettings.json
我正在研究一个多租户 .net6.0 解决方案,其中包含许多嵌入式项目
为了降低维护成本,我想集中使用/link 一个单独的应用程序设置。{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 路径的应用程序设置(来自同一文件)returns null。
这是program.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 运行.[=13= 时结果为空]
然后我应该能够引用 sharedsettings.json 作为本地文件
我现在正在做的是;
- 在部署中包含外部文件
<ItemGroup>
<Content Include="..\SharedSettings\sharedsettings.development.JSON" Link="sharedsettings.development.JSON">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="..\SharedSettings\sharedsettings.JSON" Link="sharedsettings.JSON">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="..\SharedSettings\sharedsettings.production.JSON" Link="sharedsettings.production.JSON">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="..\SharedSettings\sharedsettings.staging.JSON" Link="sharedsettings.staging.JSON">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
</ItemGroup>
添加外部文件(作为 link)
[这里]https://andrewlock.net/including-linked-files-from-outside-the-project-directory-in-asp-net-core/
在配置生成器中引用文件,就好像它是本地文件一样
Configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile($"..\SharedSettings\sharedsettings.{environment}.JSON", true, true)
.AddJsonFile($"sharedsettings.{environment}.json", true, true)
.AddEnvironmentVariables()
.Build();
构建是完美的,但是 dotnet 运行 仍然有 NULL 值引用,除非我硬添加共享设置文件,即将它们嵌入每个项目而不是作为 link。 :生气:
Configuration = new ConfigurationBuilder()
.SetBasePath(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location))
//.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile($"..\SharedSettings\sharedsettings.{environment}.JSON", true, true)
.AddJsonFile($"sharedsettings.{environment}.json", true, true)
.AddEnvironmentVariables()
.Build();
与 this one 类似的问题。
这一切都与基本路径有关。
我正在研究一个多租户 .net6.0 解决方案,其中包含许多嵌入式项目
为了降低维护成本,我想集中使用/link 一个单独的应用程序设置。{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 路径的应用程序设置(来自同一文件)returns null。
这是program.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 运行.[=13= 时结果为空]
然后我应该能够引用 sharedsettings.json 作为本地文件
我现在正在做的是;
- 在部署中包含外部文件
<ItemGroup>
<Content Include="..\SharedSettings\sharedsettings.development.JSON" Link="sharedsettings.development.JSON">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="..\SharedSettings\sharedsettings.JSON" Link="sharedsettings.JSON">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="..\SharedSettings\sharedsettings.production.JSON" Link="sharedsettings.production.JSON">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="..\SharedSettings\sharedsettings.staging.JSON" Link="sharedsettings.staging.JSON">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
</ItemGroup>
添加外部文件(作为 link) [这里]https://andrewlock.net/including-linked-files-from-outside-the-project-directory-in-asp-net-core/
在配置生成器中引用文件,就好像它是本地文件一样
Configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile($"..\SharedSettings\sharedsettings.{environment}.JSON", true, true)
.AddJsonFile($"sharedsettings.{environment}.json", true, true)
.AddEnvironmentVariables()
.Build();
构建是完美的,但是 dotnet 运行 仍然有 NULL 值引用,除非我硬添加共享设置文件,即将它们嵌入每个项目而不是作为 link。 :生气:
Configuration = new ConfigurationBuilder()
.SetBasePath(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location))
//.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile($"..\SharedSettings\sharedsettings.{environment}.JSON", true, true)
.AddJsonFile($"sharedsettings.{environment}.json", true, true)
.AddEnvironmentVariables()
.Build();
与 this one 类似的问题。
这一切都与基本路径有关。