簡體   English   中英

ConfigurationManager.AppSettings 獲取 null?

[英]ConfigurationManager.AppSettings getting null?

I did not realize that: 'have a web.config in a separate class library and' was reading the web.config app setting from different web application.

我正在使用 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>

如果你是單位測試你需要的單元測試項目里面的app.config副本

您上面發布的代碼是否使用單獨的類庫添加到主asp.net庫中?

如果是,並且已經使用上面發布的設置將app.config添加到該庫中,則ConfigurationManager無法讀取正確的文件,因為它將查找asp.net庫的web.config文件。

問題

造成這種情況的通常原因是上下文。

原因

當您有一個包含兩個項目的解決方案時,如果App/Web.Config在主項目中,如果正在運行的應用程序的上下文是第二個項目(例如庫、單元測試等),則它不會工作。

難題

要從其他項目(使用System.Configuration )中的配置讀取值,您需要將配置文件移動/復制到具有運行上下文的項目。 不幸的是,復制文件會妨礙良好的編程; OOP、源代碼管理、SOLID 等。

很酷的解決方案

一個不錯的解決方案是在其他項目中添加配置文件快捷方式,這樣您只需更新一個文件:

在此處輸入圖片說明

config文件的內容跨項目划分會很好。 優雅地,就像根據答案 #2 共享程序集文件: https : //stackoverflow.com/a/15319582/495455但可惜它是由上下文

免責聲明;)這篇文章不是為了回答 OP,因為為時已晚,但它肯定會幫助最終到達此頁面的讀者。

我面臨的問題ConfigurationManager.AppSettings["uName"]在我的 C# web api 項目中返回null

我檢查的基本內容

1)在代碼ConfigurationManager.AppSettings["uName"] ,我使用了與web.config文件中一樣的精確鍵 ' uName ',

IE

<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>
    <add key="StoreId" value="123" />
</appSettings>

位於 ASP.NET 應用程序的web.config文件中,而不是在 Visual Studio 中添加到類庫項目的某個app.config文件中,對嗎? 如果是這種情況,你不可能得到null 如果您已將其添加到 Visual Studio 中類庫項目的app.config ,則獲取 null 是完全正常的行為。

我剛剛得到答案 DLL 是從另一個項目中調用的,而不是在 App.config 中有 create.so 條目的項目中,應該移動到調用項目配置文件。

例如,我的解決方案中有 2 個項目,一個類庫和其他控制台應用程序。我在控制台應用程序中添加了類庫引用。所以,如果我在類庫項目中添加 app.config 文件,它會通過 null 異常。它在我添加應用程序時工作.config 在控制台應用程序中。希望它有效

應用程序設置加載到 ConfigurationManager.AppSettings 中,但用戶設置(在項目屬性的屬性設置中)未加載。

我嘗試了所有這些解決方案,但沒有一個對我有用。 我試圖使用“web.config”文件。 一切都被正確命名並且文件位於正確的位置,但它拒絕工作。 然后我決定將我的“web.config”文件重命名為“app.config”,就這樣,它起作用了。

因此,如果您在使用“web.config”文件時遇到此問題,請務必將其重命名為“app.config”。

當我測試類庫 (.dll) 時,這發生在我身上。 它們都在同一個項目中,但庫的 App.config 具有我需要的設置。 我編寫用於測試的應用程序需要設置,因為正在運行庫。

當我從文件資源管理器復制一個項目並重命名該項目時,我遇到了這個問題。 這復制了 Debug 文件夾,因為我沒有將它設置為“如果更新則復制”,它不會覆蓋舊的 App.config 文件。

只需刪除 Debug 文件夾並重建。 希望能幫助某人。

我同意上面的答案,我想補充幾點

  1. 您應該確保不在 : 前后放置空格,請參閱下面的代碼:

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

    如果您在 ida: ClientId 之間放置空格,它將不起作用並返回 null

  2. 確保您的鍵值名稱正確

  3. 你可以試試 WebConfigurationManager

剛剛發生在我身上,只有在從另一個項目調用它時才發生。 顯然,在另一個項目中,引用並未定義為服務引用,而是定義為連接服務。 我刪除了引用並重新添加了它。

在 Visual Studio 中,右鍵單擊配置文件,選擇“屬性”,然后將“復制到輸出目錄”更改為“始終復制”或“如果更新則復制”。

或者,手動將以下部分添加為 .csproj 文件中元素的子項(此部分用於文件“App.config”的“始終復制”):

  <ItemGroup>
    <None Update="App.config">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </None>
  </ItemGroup>
string setting = ConfigurationManager.AppSettings["Setting"];
  1. 確保配置文件與引用它的代碼位於同一文件夾中。 如果不是,則創建一個助手 class。 如果有人忘記它存在於兩個地方,復制它可能會導致混亂。
  2. 將應用程序設置保留在 app.config 中,而不是 web.config 中用於 AppSettings。我在 web.config 中遇到了這個問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM