Asp.net

在 Asp.Net Core App 中訪問 Web.config 設置?

  • October 21, 2016

我知道 asp.net core 有一個新的配置系統,它非常靈活,非常棒。但是我喜歡 .net 4.x 中基於 web.config 的配置系統。例如,可以在 web.config 文件中添加註釋,因為它是一個 xml 文件。這對我來說值得堅持使用 xml 而不是使用閃亮的新 json 方法。[**更新:**我現在明白 json 方法也支持文件中的註釋。]

因此,如果我有一個針對完整框架的 Asp.Net Core Web 項目,我似乎應該能夠使用基於 web.config 的System.Configuration.ConfigurationManager.AppSettings[key]方法來獲取設置。

但是當我嘗試時,該值總是返回 null (至少在使用 VS2015 的 IIS express 中)。

它應該工作正常嗎?對我可能過度關注的內容有任何想法嗎?

網頁配置

<configuration>
   <appSettings>
       <add key="SomeSetting" value="true"/>
   </appSettings>

   <system.webServer>
       <handlers>
           <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified"/>
       </handlers>

       <aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false"/>
    </system.webServer>
</configuration>

訪問設置的程式碼:

string key = "SomeSetting";
string setting = ConfigurationManager.AppSettings[key];
if (setting == null)
      throw new Exception("The required configuration key " + key + " is missing. ");

更新

經過更多研究,我現在明白為什麼它不起作用但我仍然沒有找到解決它的方法。根本原因似乎是 ConfigurationManager 在不同的文件中而不是在 web.config 中查找配置資訊。

這可以通過查看AppDomain.CurrentDomain.SetupInformation.ConfigurationFile屬性來看出。在我的情況下,website_folder\web.config它不是指向它,而是指向website_folder\bin\Debug\net461\win7-x64\wwwGiftOasisResponsive.exe.Configwebsite_folder 是包含我的網站的文件夾的路徑。

文件和智能感知說AppDomain.CurrentDomain.SetupInformation.ConfigurationFile是一個可設置的屬性,但是當我嘗試時,我發現設置它不會改變它的值。很奇怪。

因此,雖然我現在看到問題所在,但我似乎無法找到解決問題的方法。

我找到了解決方案。弄清楚它的關鍵是意識到該AppDomain.CurrentDomain.SetupInformation.ConfigurationFile屬性不是指向 web.config 文件,而是指向執行網站的執行檔的 exe.config 文件。請記住,在 .net core 下,網站執行在自己的程序中,並且有自己的 exe。

因此 .Net 4.x 與 ConfigurationManager 一起使用的配置模型更像是桌面應用程序,而不是 4.x Web 應用程序。我的意思是它正在查看 exe.config 而不是 web.config。

然後我注意到 Asp.Net Core Web 項目(使用完整的框架)包含一個 app.config 文件,就像桌面應用程序一樣。事實證明,如果您將 .net 4.x 應用程序配置設置放在該文件中,它們將在生成 exe 時放置在 exe.config 文件中,無論是用於調試還是發布。就像它與例如 win forms 應用程序一樣。

因此,在面向完整框架的 asp.net 核心 Web 應用程序中使用 ConfigurationManager 的方法是將應用程序設置放在 app.config 文件而不是 web.config 文件中。ConfigurationManager 會發現它們沒有問題。

在此處輸入圖像描述

雖然這解釋了很多,但它仍然沒有提供將這些設置實際放入 web.config 並通過 ConfigurationManager 訪問它們的能力。但是我開始相信在 asp.net 核心 Web 應用程序中這是不可能的,即使它針對的是完整的框架。

引用自:https://stackoverflow.com/questions/40186445