C# ConfigurationManager.AppSettings始终为空

C# ConfigurationManager.AppSettings始终为空,c#,.net,.net-core,C#,.net,.net Core,我搜索的线索 我的应用程序是.NET Core 3.1应用程序,因此我通过NuGet将库System.Configuration.ConfigurationManager添加到我的项目中。我的根文件夹包含一个Web.Config,其中包含以下内容 <?xml version="1.0" encoding="utf-8"?> <configuration> <system.web> <compilation debug=

我搜索的线索

我的应用程序是.NET Core 3.1应用程序,因此我通过NuGet将库
System.Configuration.ConfigurationManager
添加到我的项目中。我的根文件夹包含一个
Web.Config
,其中包含以下内容

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.web>
        <compilation debug="true"  />
        <httpRuntime  />
    </system.web>
    <appSettings>
        <!-- Folder of LogParser job-configurations -->
        <add key="JobFolder" value="App_Data/jobs"/>
        <!-- Background task execution interval in seconds -->
        <add key="Interval" value="5"/>
        <!-- Message offset in seconds. Reads older messages to circumvent log4net timestamp bug -->
        <add key="Offset" value="7200"/>
        <!-- Caching duration for hash MemoryCache in seconds. Default is 604800 (7 days) -->
        <add key="Caching" value="604800"/>
    </appSettings>
</configuration>

但是,当我访问
ConfigurationManager.AppSettings[key]
时,它总是空的。另外,
Configurationmanager.AppSettings.AllKeys
为空,计数为0,就好像它没有被解析一样

有什么想法吗?

好的,给我指出了正确的方向

所以基本上,我需要一个
appsettings.json
文件(即使互联网告诉我不是这样),我这样定义它

{
    "JobFolder": "App_Data/jobs",
    "Interval": 5,
    "Offset": 7200,
    "Caching": 604800
}
然后,在我需要它的类中,我添加了一个新的构造函数参数
iconfigurationconfiguration
,它已经在DI容器中注册,因此不需要进一步的操作

然后,当我想要访问该值时,我可以简单地执行
\u configuration.GetValue(“JobFolder”)
并获得该值


谢谢。

我想补充一点,这里的任何人都没有使用appsettings.json的选项

对我来说,这个问题在UnitTest项目中表现出来。ConfigurationManager需要一个名为ASSEMBLYNAME.dll.config的文件,但.net core中的单元测试以“testhost”的名称运行,因此它会查找testhost.dll.config。因此,您需要重命名生成的配置文件,以匹配ConfigurationManager所查找的内容

在csproj文件中,添加一个构建步骤,如

<Target Name="CopyAppConfig" AfterTargets="Build" DependsOnTargets="Build">
    <CreateItem Include="$(OutputPath)$(AssemblyName).dll.config">
      <Output TaskParameter="Include" ItemName="FilesToCopy"/>
    </CreateItem>
    <Copy SourceFiles="@(FilesToCopy)" DestinationFiles="$(OutputPath)testhost.dll.config" />
</Target>

解决方案来自

你确定你不是想要一个appSettings.json文件吗?我有一个,是的,但我说我需要一个.config文件。我需要一个appSettings.json文件吗?Dot net core不使用
.config
文件和配置manager@Nkosi是的,我读过,但当它作为一个NuGet包添加时,它是受支持的(至少我是通过谷歌发现的)。还有其他方法可以获取内容吗?@TanveerBadar你是对的。我说错了。默认情况下,它不再使用它。您必须显式地添加/引用它才能立即使用它。