![](/img/trans.png)
[英]What is the difference between App.Config and Web.Config in .Net?
[英]Pros and cons of AppSettings vs applicationSettings (.NET app.config / Web.config)
在開發 .NET Windows 窗體應用程序時,我們可以選擇這些App.config
標記來存儲我們的配置值。 哪一個更好?
<configuration>
<!-- Choice 1 -->
<appSettings>
<add key="RequestTimeoutInMilliseconds" value="10000"/>
</appSettings>
<!-- Choice 2 -->
<configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c5612342342" >
<section name="Project1.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c5612342342" requirePermission="false" />
</sectionGroup>
</configSections>
<applicationSettings>
<Project1.Properties.Settings>
<setting name="TABLEA" serializeAs="String">
<value>TABLEA</value>
</setting>
</Project1.Properties.Settings>
</applicationSettings>
</configuration>
基本的<appSettings>
更容易處理 - 只需<add key="...." value="..." />
一個<add key="...." value="..." />
條目,您就完成了。
缺點是:沒有類型檢查,例如,您不能安全地假設您想要配置的號碼確實有一個號碼 - 有人可以將一個字符串放入該設置中.....您只需以ConfigurationManager["(key)"]
然后由您決定要處理的內容。
此外,隨着時間的推移, <appSettings>
可能會變得相當復雜和凌亂,如果您的應用程序的很多部分開始將內容放入其中(還記得舊的 windows.ini 文件嗎?:-))。
如果可以,我更願意並推薦使用您自己的配置部分 - 使用 .NET 2.0,它真的變得非常簡單,這樣,您可以:
在 CodeProject 上有一系列非常好的文章來揭開 .NET 2.0 配置系統的神秘面紗:
強烈推薦! Jon Rista 出色地解釋了 .NET 2.0 中的配置系統。
應用程序設置可以由設計器控制(默認情況下通常有一個 Settings.settings 文件),因此它更容易修改,您可以通過 Settings 類以編程方式訪問它們,它們看起來像強類型屬性。 您還可以擁有應用程序和用戶級別設置,以及用於回滾的默認設置。
這可以從 .NET 2.0 開始使用,並棄用了其他方式(據我所知)。
要了解的設置中的利弊app.config
,我建議你看看雙方的技術細節。 我已經包含了一些鏈接,您可以在其中找到處理的源代碼,在下面描述了更多的技術細節。
讓我簡要總結一下我在與他們合作時認識到的內容(注意:這同樣適用於網站/Web 應用程序的web.config
文件):
.NET 中的應用程序設置
(點擊上方查看源代碼和技術細節)
優點
它們允許存儲類型化數據,包括對象類型(通過serializeAs
屬性)
它們有用戶和應用程序范圍,允許存儲默認值
Visual Studio 的配置部分支持它們
長字符串和/或帶有特殊字符的數據得到很好的支持(例如,包含雙引號的嵌入式 JSON 字符串)
缺點
用戶設置存儲在用戶配置文件中的不同位置(帶有神秘路徑),可能難以清理
應用程序范圍設置在應用程序運行期間是只讀的(在運行期間只能更改用戶范圍設置)
由 Visual Studio 的設置設計器構建的讀取/寫入方法代碼,而不是由 3rd 方工具直接提供(請參閱上面的鏈接以獲取解決方法)
.NET 中的應用設置
更新: .NET Core 中的 AppSettings
(點擊上方查看源代碼和技術細節)
優點
是“輕量級的”,即易於處理
應用程序運行期間的讀寫訪問
管理員可以輕松編輯它們
Internet 信息服務 (IIS) 管理器
(Features View -> Application Settings,注意圖標的名字有誤導性,因為它只能處理AppSettings,不能處理ApplicationSettings)
缺點
僅支持字符串數據; 字符串長度和特殊字符有限制
他們沒有用戶范圍
他們不支持默認值
Visual Studio 的配置部分不直接支持
我一直在使用我不久前發現的一種模式,您使用基本的 xml 標簽但將設置包裝在靜態配置類中。 所以 - 一個 DIY App.Settings。
如果你這樣做,你可以:
設置起來很乏味,但性能很好,隱藏了對鍵名的引用,並且是強類型的。 這種模式適用於應用程序未更改的配置,盡管您可能也可以支持更改。
配置:
<add key="machineName" value="Prod" />
<add key="anotherMachineName" value="Test" />
<add key="EnvTypeDefault" value="Dev" />
<add key="RootURLProd" value="http://domain.com/app/" />
<add key="RootURLTest" value="http://test.domain.com/app/" />
<add key="RootURLDev" value="http://localhost/app/" />
<add key="HumanReadableEnvTypeProd" value="" />
<add key="HumanReadableEnvTypeTest" value="Test Mode" />
<add key="HumanReadableEnvTypeDev" value="Development Mode" />
配置類:
using System;
using System.Collections.Generic;
using System.Web;
using WebConfig = System.Web.Configuration.WebConfigurationManager;
public static class Config
{
#region Properties
public static string EnvironmentType { get; private set; }
public static Uri RootURL { get; private set; }
public static string HumanReadableEnvType { get; private set; }
#endregion
#region CTOR
/// <summary>
/// Initializes all settings when the app spins up
/// </summary>
static Config()
{
// Init all settings here to prevent repeated NameValueCollection lookups
// Can increase performance on high volume apps
EnvironmentType =
WebConfig.AppSettings[System.Environment.MachineName] ??
"Dev";
RootURL =
new Uri(WebConfig.AppSettings["RootURL" + EnvironmentType]);
HumanReadableEnvType =
WebConfig.AppSettings["HumanReadableEnvType" + Config.EnvironmentType] ??
string.Empty;
}
#endregion
}
我喜歡使用更簡單的版本來存儲和訪問單個值。
<appSettings>
<add key="MyConfigKey" value="true"/>
</appSettings>
我編寫了一個實用程序類,以允許默認值的類型安全方式訪問值。 如果未提供默認值,則會給出有用的異常消息。
您可以在此處查看/下載課程:
使用 ApplicationSettings 的一大好處是當應用程序通過 ClickOnce 部署時,如本頁中詳細說明的那樣。
基本上,如果設置的類型為 User 並且已從其默認值進行修改,則它會在每次更新時保持修改狀態。 如果設置的類型為應用程序,則更新應用程序時將自動覆蓋該設置。
此外,在 VB.NET 中,只需使用 My.Settings 即可訪問 ApplicationSettings。 從 GUI 的角度來看,使其成為最簡單的設置位置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.