.NET Core 2.0多控制台项目共享类库portsettings.json配置文件问题
解决.NET Core 2.0类库共享JSON配置文件的问题
嘿,我来帮你搞定这个共享配置的问题——你有三个并行运行在不同端口的控制台项目,想把端口配置放在共用的PrjCommon类库的portsettings.json里,还遇到了Debug模式下的运行问题对吧?下面是一步步的实操方案,保证能解决你的困扰:
第一步:配置PrjCommon中的portsettings.json文件
- 在PrjCommon类库中添加
portsettings.json文件,写入你的端口配置,示例内容如下:
{ "ProjectPorts": { "PrjA": 5000, "PrjB": 5010, "PrjC": 5020 } }
- 关键设置:右键这个JSON文件→选择「属性」,将「复制到输出目录」设置为「如果较新则复制」,「生成操作」设置为「内容」。这一步直接决定了Debug运行时配置文件能不能被控制台项目读到,千万别漏掉!
第二步:在PrjCommon中创建配置读取辅助类
我们需要一个统一的工具类来读取配置,这样三个控制台项目就能直接调用。在PrjCommon里新建一个静态类PortSettingsHelper:
using Microsoft.Extensions.Configuration; using System.IO; namespace PrjCommon { public static class PortSettingsHelper { private static readonly IConfiguration _config; static PortSettingsHelper() { // 构建配置对象,指向当前运行目录的portsettings.json var configBuilder = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("portsettings.json", optional: false, reloadOnChange: true); _config = configBuilder.Build(); } // 根据项目名称获取对应端口 public static int GetProjectPort(string projectName) { return _config.GetValue<int>($"ProjectPorts:{projectName}"); } } }
这里Directory.GetCurrentDirectory()在Debug模式下会指向控制台项目的输出目录(比如PrjA\bin\Debug\netcoreapp2.0),只要配置文件复制到这里,就能正常读取。
第三步:在控制台项目中使用共享配置
以PrjA为例,在Program.cs里直接调用辅助类获取端口:
using PrjCommon; using System; namespace PrjA { class Program { static void Main(string[] args) { int port = PortSettingsHelper.GetProjectPort("PrjA"); Console.WriteLine($"PrjA 启动,监听端口:{port}"); // 这里添加你的服务启动逻辑,比如Kestrel监听该端口 } } }
PrjB和PrjC的用法完全一致,只需要把参数改成对应的项目名称即可。
Debug模式下的常见问题排查
如果你在Debug运行时遇到找不到配置文件的问题,可以按以下步骤检查:
- 确认PrjCommon的
portsettings.json属性设置正确,特别是「复制到输出目录」有没有设对; - 手动查看控制台项目的输出目录(比如
PrjA\bin\Debug\netcoreapp2.0),确认里面存在portsettings.json文件; - 尝试清理整个解决方案(右键解决方案→清理),然后重新生成所有项目,确保配置文件被正确复制;
- 因为三个项目并行运行,各自的输出目录是独立的,但PrjCommon编译后会自动把配置文件复制到每个控制台项目的输出目录,所以不用担心互相影响。
内容的提问来源于stack exchange,提问作者Diego
相关产品推荐
相关产品推荐

