我有一个asp.net core
解决方案,里面有多个API项目,这是一种微服务架构。我的解决方案结构如下所示。
ABC.API
DEF.API
GHI.API and so on....
我还有一个类库项目,它具有一些通用功能,可供上述所有 API 项目使用。
我想使用 json
文件或 config
文件将连接字符串保留在类库项目中,因为以上所有内容都连接到同一数据库,而我不这样做不想在所有项目中重复这些。
问题:
- 如何将文件(json/config)保留在库项目中。如果放置,则在发布项目后这些值将如何存储,因为它将生成一个 .dll 文件。
- 如何访问 API 项目中的连接字符串,原因是我正在初始化 API 项目中的连接。
我尝试将文件保留在上层文件夹中,然后在
Program.cs
中添加以下设置。var sharedFolder = Path.Combine(env.ContentRootPath, "..\\..", "Shared"); config..AddJsonFile(Path.Combine(sharedFolder, "SharedSettings.json"), optional: false)
但这不起作用,因为单独发布项目后将找不到文件夹。
任何人都可以指导我如何实现这一目标吗?我走在正确的道路上吗?
最佳答案
我也遇到了同样的问题
我通过执行以下操作解决了这个问题。
为所有共享依赖项创建类库
在此类库中创建名为 AppSettings 的文件夹。将所有 json 配置存储在其中
然后,我在该类库中创建了一个名为
JsonConfiguration.cs
的静态帮助器类,请参阅代码public static class JsonConfiguration { public static IConfiguration ConfigurationContainer { get; private set; } public static IConfiguration CreateConfigurationContainer() { var environment = string.Empty; try { environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); _logger.Debug($"Found environment variable : {environment}"); if (string.IsNullOrWhiteSpace(environment)) { _logger.Debug($"Setting up Production appsettings."); //WE ARE IN PROD !! return ConfigurationContainer = new ConfigurationBuilder() .SetBasePath(AppDomain.CurrentDomain.BaseDirectory) .AddJsonFile($"bin/AppSettings/appsettings.json").Build(); } _logger.Debug($"Setting up {environment} appsettings."); return ConfigurationContainer = new ConfigurationBuilder() .SetBasePath(AppDomain.CurrentDomain.BaseDirectory) .AddJsonFile($"bin/AppSettings/appsettings-{environment}.json").Build(); } catch (Exception ex) { _logger.Fatal(ex, "{message} {environment}", "Failed Setting up Application Config.", environment); throw; } }
}
确保您的 json 文件被标记为“复制到输出目录”以始终复制。
然后,您可以在需要它的应用程序中注册 IConfiguration 并调用 JsonConfiguration.CreateConfigurationContainer()
,我可能会将您的连接字符串映射到具体的模型类并在需要的地方注入(inject)。希望这足以让您继续前进。
关于asp.net-core - ASP.NET Core中的项目之间共享配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52888880/