【问题标题】:ConfigurationManager.AppSettings getting null?ConfigurationManager.AppSettings 为空?
【发布时间】:2010-11-25 21:30:59
【问题描述】:

我没有意识到:“在单独的类库中有一个 web.config 并且”正在从不同的 Web 应用程序读取 web.config 应用程序设置。

我正在使用 VS2010 目标框架 3.5

我不知道这里出了什么问题,但是当我尝试获取 ConfigurationManager.AppSettings["StoreId"]; 时,我得到了 null

private string _storeid = GetStoreId;

public static string GetStoreId
{
    get
    {
        return ConfigurationManager.AppSettings["StoreId"];
    }
}

web.config:

<appSettings>
    <add key="StoreId" value="123" />
</appSettings>

【问题讨论】:

  • 这是在您的主应用程序中吗?在类库中?在网络应用程序或网站中??
  • 嗨@Nick 你能修改正确答案吗?已经 7 年了,我发布了一个更好的解决方案。

标签: c# asp.net web-config


【解决方案1】:

如果您是UNIT TESTING,您需要UNIT TEST PROJECTAPP.CONFIG副本

【讨论】:

  • 至少制作一个App.Config 的快捷方式文件 - 通常你不应该复制代码文件,除非通过版本控制系统.如果您可以尝试在单元测试中使用 DI 并模拟 App.Config。
  • 这是我的问题的解决方案。我不得不从我的 web.config 中提取标签并将它们放在 分支之间的 app.config 中。一旦我这样做了,我的单元测试就开始正常工作了。
  • 为什么我们必须向下滚动才能得到这个答案?有人能把它搬上来吗?
  • 我想我一定是训练自己忽略任何带有大写锁定的帖子,因为我一开始直接滚动过去...然后向上滚动并意识到这是确切的 按问题解决...
  • 我同意@JeremyThompson 写的内容。但是,我将其称为链接,而不是“快捷方式”。意思是在另一个项目中创建指向您的文件的链接。我建议将配置文件简单地放在解决方案下的共享文件夹中,并通过在每个项目中添加链接文件让相关项目都共享它。这就是这个解决方案中提到的内容 (stackoverflow.com/a/60107554/4441211),我认为它是对这个解决方案的补充。
【解决方案2】:

问题

这通常是由上下文引起的。

原因

当您有一个包含两个项目的解决方案时,如果 App/Web.Config 在主项目中,如果正在运行的应用程序的上下文是第二个项目(例如库、单元测试等),则它将无法工作。

难题

要从其他项目的配置中读取值(使用System.Configuration),您需要将配置文件移动/复制到具有运行上下文的项目中。不幸的是,复制文件会破坏良好编程的租户; OOP、源码管理、SOLID等

很酷的解决方案

一个不错的解决方案是在其他项目中添加配置文件快捷方式,这样您只需更新一个文件:

最好将config 文件的内容跨项目划分。优雅地,就像按照答案 #2 共享程序集文件:https://stackoverflow.com/a/15319582/495455 但可惜它是由 context

【讨论】:

  • 控制台应用程序引用和调用类库也是如此。设置进入控制台的 app.config 并且可以从类库中调用,例如 ConfigurationManager.AppSettings["myKey"]
  • 投反对票。这是对抗症状,而不是解决问题。这使得未来的更新容易出错,因为您可能希望为每个项目设置单独的配置值。
  • @Spukee 你能提供一个解决方案的答案吗?
  • @JeremyThompson:接受的答案很好。我主要担心的是,提供链接会给你一种虚假的安全感。单独维护每个文件需要更多的纪律,但这绝不是一件坏事。这也意味着您非常了解正在发生的事情,而不是“假设”一切正常。
  • 接受的答案很好 - 不,它甚至不是一个解决方案。您可以在解决方案资源管理器中看到该文件是一个快捷方式,抱歉,我不适合想要维护基本相同文件副本的人!新秀。
【解决方案3】:

免责声明 ;) 这篇文章不是为了回答 OP,因为它为时已晚,但肯定会帮助最终到达此页面的读者。

我遇到的问题ConfigurationManager.AppSettings["uName"] 在我的 C# web api 项目中返回 null

我检查的基本内容

1) 在代码 ConfigurationManager.AppSettings["uName"] 中,我使用的正是 web.config 文件中的密钥 'uName',

<appSettings>
      <add key="uName" value="myValue" />
</appSettings>

检查我没有误输入userName而不是uName等。

2) 由于它是一个 Web API 项目,因此它的文件为 web.config 而不是 app.config ,并且在项目的 根文件夹 中也是如此. [参考图片]。

解决方案

对我有用的解决方案,

已更改 ConfigurationManager.AppSettings["uName"]WebConfigurationManager.AppSettings["uName"]

确保我有

<appSettings>
          <add key="uName" value="myValue" />
</appSettings>

文件中,即。

正确的文件是不是查看文件夹中的 web.config

既不调试也不发布 web.config

【讨论】:

  • 这是我的错误。我使用了错误的网络配置。 AppSettings 位于其他 Web 配置中。谢谢你的帮助:)
  • 谢谢冠军! :)
  • @BernardV,乐于助人 :) !!
【解决方案4】:

和:

<appSettings>
    <add key="StoreId" value="123" />
</appSettings>

位于您的 ASP.NET 应用程序的 web.config 文件中,而不是您添加到 Visual Studio 中的类库项目中的某个 app.config 文件中,对吧?如果是这种情况,你不可能得到null。如果您已将此添加到 Visual Studio 中的类库项目的 app.config 中,那么获取 null 是完全正常的行为。

【讨论】:

  • 它位于我的网络应用程序中的web.config
  • 值得注意的是,如果您有一个运行代码的测试工具,那么 its app.config 需要具有您要查找的设置。
【解决方案5】:

我刚刚得到答案 DLL 是从另一个项目调用的,而不是在 App.config 中有 create.so 条目的项目中,应该移至调用项目配置文件。

例如,我的解决方案中有 2 个项目,一个类库和其他控制台应用程序。我在控制台应用程序中添加了类库引用。因此,如果我在类库项目中添加 app.config 文件,则通过空异常。我在控制台应用程序中添加了 app.config。希望它能正常工作

【讨论】:

    【解决方案6】:

    应用设置加载到 ConfigurationManager.AppSettings,但用户设置(在项目属性的属性设置中)不是。

    【讨论】:

      【解决方案7】:

      我尝试了所有这些解决方案,但没有一个对我有用。我试图使用“web.config”文件。一切都正确命名,文件在正确的位置,但它拒绝工作。然后我决定将我的“web.config”文件重命名为“app.config”,就这样,它成功了。

      因此,如果您在使用“web.config”文件时遇到此问题,请务必将其重命名为“app.config”。

      【讨论】:

        【解决方案8】:

        这发生在我测试类库 (.dll) 时。它们都在同一个项目中,但库的 App.config 具有我需要的设置。我编写的用于测试的应用程序需要这些设置,因为 正在运行该库。

        【讨论】:

          【解决方案9】:

          当我从文件资源管理器复制一个项目并重命名该项目时,我遇到了这个问题。这复制了 Debug 文件夹,因为我没有将它设置为“如果较新则复制”,它没有覆盖旧的 App.config 文件。

          只需删除 Debug 文件夹并重建。希望对某人有所帮助。

          【讨论】:

            【解决方案10】:

            我同意上面的回答,我想补充几点

            1. 您应该确保不要在 : 之前和之后放置空格 见下面的代码:

              private static string Client_ID = ConfigurationManager.AppSettings["ida:ClientId"];
              

              如果你在 ida: ClientId 之间放置空格,它将不起作用并返回 null

            2. 确保您的键值名称正确

            3. 你可以试试 WebConfigurationManager

            【讨论】:

              【解决方案11】:

              刚刚发生在我身上,只是从另一个项目中调用它时。 显然,在另一个项目中,该引用尚未定义为服务引用,而是定义为连接服务。我删除了引用并重新添加了它。

              【讨论】:

                【解决方案12】:

                在 Visual Studio 中,右键单击配置文件,选择“属性”,然后将“复制到输出目录”更改为“始终复制”或“如果更新则复制”。

                或者,手动添加以下部分作为 .csproj 文件中元素的子项(此部分用于文件“App.config”的“始终复制”):

                  <ItemGroup>
                    <None Update="App.config">
                      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
                    </None>
                  </ItemGroup>
                

                【讨论】:

                  猜你喜欢
                  • 2020-05-03
                  • 2018-04-09
                  • 2017-08-15
                  • 2010-09-28
                  • 2013-08-30
                  • 1970-01-01
                  • 2018-10-02
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多