c# - winform - web config appsettings




從.net中的app.config或web.config中讀取設置 (13)

web.config用於Web應用程序。 web.config默認會有幾個Web應用程序所需的配置。 您可以為Web應用程序下的每個文件夾設置一個web.config

app.config用於Windows應用程序。 當您在vs.net中構建應用程序時,它將自動重命名為<appname>.exe.config並且此文件必須隨應用程序一起交付。

您可以使用相同的方法從兩個配置文件中調用app settings值:

System.Configuration.COnfigurationSettings.AppSettings["Key"]

我正在研究一個C#類庫,它需要能夠從web.configapp.config文件中讀取設置(具體取決於DLL是從ASP.NET Web應用程序還是Windows窗體應用程序中引用的)。

我發現了

ConfigurationSettings.AppSettings.Get("MySetting")

工作,但該代碼已被標記為Microsoft棄用。

我讀過,我應該使用:

ConfigurationManager.AppSettings["MySetting"]

但是, System.Configuration.ConfigurationManager類似乎從C#類庫項目中不可用。

有誰知道做這件事的最好方法是什麼?


例如:

<applicationSettings>
        <MyApp.My.MySettings>
            <setting name="Printer" serializeAs="String">
                <value>1234 </value>
            </setting>
        </MyApp.My.MySettings>
    </applicationSettings>
Dim strPrinterName as string= My.settings.Printer

另外,你可以使用formo

配置:

<appSettings>
    <add key="RetryAttempts" value="5" />
    <add key="ApplicationBuildDate" value="11/4/1999 6:23 AM" />
</appSettings>

碼:

dynamic config = new Configuration();
var retryAttempts1 = config.RetryAttempts;                 // returns 5 as a string
var retryAttempts2 = config.RetryAttempts(10);             // returns 5 if found in config, else 10
var retryAttempts3 = config.RetryAttempts(userInput, 10);  // returns 5 if it exists in config, else userInput if not null, else 10
var appBuildDate = config.ApplicationBuildDate<DateTime>();

右鍵單擊您的類庫,然後從菜單中選擇“添加引用”選項; 最後從.NET選項卡中選擇System.Configuration。 這將包括System.Configuration DLL到您的項目。


對於如下的示例App.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="countoffiles" value="7" />
    <add key="logfilelocation" value="abc.txt" />
  </appSettings>
</configuration>

您使用下面顯示的代碼閱讀上述應用程序設置:

using System.Configuration;

如果您的項目中還沒有一個,您可能還需要在項目中添加對System.Configuration的引用。 然後你可以像這樣訪問值:

string configvalue1 = ConfigurationManager.AppSettings["countoffiles"];
string configvalue2 = ConfigurationManager.AppSettings["logfilelocation"];

希望這可以幫助!


從配置讀取:

您需要添加對Config的引用

  1. 在您的項目上打開“屬性”
  2. 轉到“設置”標籤
  3. 添加“名稱”和“值”
  4. 使用以下代碼獲取價值:

    字符串值= Properties.Settings.Default.keyname;

保存到配置:

   Properties.Settings.Default.keyName = value;
   Properties.Settings.Default.Save();

您必須向項目添加對System.Configuration程序集的引用。


您需要在項目的引用文件夾中 添加System.Configuration引用

您肯定應該使用ConfigurationManager覆蓋過時的ConfigurationSettings


我強烈建議你為這個調用創建一個Wrapper。 就像一個ConfigurationReaderService並使用依賴注入來獲得這個類。 這樣你就可以隔離這個配置文件用於測試目的。

所以使用ConfigurationManager.AppSettings["something"]; 建議並返回此值。 如果在.config文件中沒有可用的密鑰,則可以使用此方法創建某種默認返回。


我正在使用這個,它適合我

textBox1.Text = ConfigurationManager.AppSettings["Name"];

我遇到了同樣的問題,只是以這種方式閱讀它們:

System.Configuration.ConfigurationSettings.AppSettings["MySetting"]

框架4.5和4.6的更新; 以下將不再起作用:

string keyvalue=System.Configuration.ConfigurationManager.AppSettings["keyname"];

現在通過Properties訪問Setting類:

string keyvalue= Properties.Settings.Default.keyname;

請參閱管理應用程序設置以獲取更多信


為了完整起見,還有另一個選項僅適用於Web項目:

System.Web.Configuration.WebConfigurationManager.AppSettings["MySetting"]

這樣做的好處是它不需要額外的引用來添加,所以對某些人來說可能更可取。







appsettings