解决方案
要解决问题,请将App.config文件添加到入口点项目中。
这是你的可执行项目,例如WinForms、WPF或控制台应用程序。
不要添加到类库项目中。
原因是当应用程序编译时,App.config会被重命名为"MyProjectName.Ext.config"。
例如,如果你有一个名为ConfigUtils的类库项目,则文件将输出为ConfigUtils.dll.config。
但是ConfigurationManager期望入口点名称加上config。
所以,如果你的ConfigUtils被MyApp控制台项目引用。然后输出文件将是MyApp.exe.config。
因此,为了让ConfigurationManager正常工作而无需进行任何进一步的干预,你需要将App.config文件放在入口点项目中。
.NET CORE方式
我建议不要使用ConfigurationManager...
只需使用新的方法!
为了演示如何在.NET Core中完成它,我创建了一个使用.NET Core 3.1.3的控制台应用程序。
我还添加了一个扩展方法来包装可重用性功能。
首先是我的代码:
using Microsoft.Extensions.Configuration;
using System;
class Program
{
private static IConfiguration _configuration;
static void Main(string[] args)
{
_configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", true, true)
.Build();
var itemsPerPage = _configuration.GetValue<int>("appSettings", "DefaultItemsPerPage");
Console.WriteLine("Items Per Page:" + itemsPerPage.ToString());
Console.ReadLine();
}
}
public static class ConfigExtenstions
{
public static T GetValue<T>(this IConfiguration configuration, string configSection, string keyName)
{
return (T)Convert.ChangeType(configuration[$"{configSection}:{keyName}"], typeof(T));
}
private static T GetValue<T>(string configSection, string configSubSection, string keyName)
{
return (T)Convert.ChangeType(Configuration[$"{configSection}:{configSubSection}:{keyName}"], typeof(T));
}
}
我的 appsettings.json 文件如下所示:
{
"appSettings": {
"DefaultItemsPerPage": 3
}
}
配置文件可以按照您的需求进行建模。在这种情况下,我让它看起来像您的app.config文件。
此外,我在Visual Studio中右键单击了appsettings.json文件,并设置为“始终复制”。
为了使所有这些工作正常,您需要添加2个NuGet包,如下所示:
![enter image description here](https://istack.dev59.com/NM89g.webp)
注意:
您可以使用其他“提供程序”从XML、INI和其他类型的文件和源中获取配置。为此,您需要添加其他NuGet包等。
即使这个链接谈论ASP.NET Core Configuration,但它非常有用,因为相同的概念适用。