2010-10-01 144 views
2

我正在嘗試使用應用程序設置和我正在處理的C#.NET項目。但我似乎無法讓它返回除默認值以外的其他任何內容。通過項目屬性,我添加了一個設置DBConnectionString,並將其值設置爲我想要使用的連接字符串。其範圍設置爲「應用程序」。爲什麼我的應用程序不能讀取MyApplication.dll.config文件?

這樣做會創建許多文件,包括Settings.settings,Settings.Designer.CS和app.conifg。從我所瞭解的兩個設置。*文件定義了一個定製的Settings類,其來自ApplicationSettingsBase。然後,Settings類具有可用於設置和檢索每個設置的自定義類型安全屬性。 app.config文件是一個存儲實際設置值的XML文件。

當我建立我的項目時,它看起來像app.config文件被複制到MyApplication.dll.config目標目錄。我的程序運行良好,並且能夠使用默認的連接字符串。

接下來我嘗試編輯MyApplicaiton.dll.config文件來更改連接字符串。我再次運行我的程序,但它繼續使用默認值。我注意到在我的Settings.Designer文件中有一個DefaultSettingValueAttribute與原始的默認字符串。我嘗試刪除此屬性,但後來當我試圖檢索連接字符串設置它只是返回null。

這是我用來讀取連接字符串的代碼。

string conn = Properties.Settings.Default.DbConnectionString 

我在做什麼錯?我怎樣才能讓它返回設置文件中的值而不是默認值?


更新:

對不起,我應該提到這一點。我實際上是通過公共API爲另一個應用程序編寫插件。所以我的項目是一個不是EXE的DLL。

+0

你在哪裏使用這條線?在DLL或應用程序? – Yogesh 2010-10-01 04:16:45

回答

3

您無法從*.dll.config文件中讀取設置。如果您的圖書館需要任何特殊設置,您需要將它們放入您的app.configweb.config文件中。

編輯:你可以在主應用程序或Web配置文件中包含外部配置文件。詳情請看here

This問題討論瞭如何管理大型項目的配置文件。

+0

查看我的更新 – 2010-10-01 03:58:53

+1

如果您無法從* .dll.config中讀取設置,那麼它們有什麼意義? – 2010-10-01 03:59:27

+0

@Eric也是如此。你嘗試過log4net嗎?您必須將log4net配置設置放入您的應用程序或Web配置文件中。 – TheVillageIdiot 2010-10-01 03:59:51

-1

設置文件和.config文件是不同的東西(我不知道爲什麼VS創建設置文件時自動添加.config。)。但是,設置文件被編譯到一個類中,並且像你說的那樣被引用。如果你使用.NET反射器反編譯DLL,Settings類將會在那裏。它用於保存常量值或外部資源。例如:錯誤消息字符串,圖標或圖像。

配置文件適用於頻繁更改或環境(dev,test,prod)之間更改的設置。對於連接字符串,您應該使用配置文件的<connectionStrings>部分。該屬性可以使用System.Configuration.ConfigurationManager [「connectionStringName」]引用。

但是,從您的原始文章看來,您的.dll文件將用於較大的項目(無論是Web項目的.exe文件)。有一點需要注意的是,所有的項目只使用一個.config文件。這就是主項目的配置文件。網站web.config文件和exe的使用XXX.XXX.XXX.exe.config(如您所見,* .exe.config文件被重命名爲app.config文件的副本)。 DLL沒有可用的配置文件。所有的dll都會查看主項目的.config文件來檢索信息。

如果您的連接字符串永遠不會改變,那麼請務必使用設置文件。否則,使用配置文件並讓主項目的開發人員確定填充連接字符串的內容。

+1

-1。他們沒有什麼不同。 Settings文件只是app.config/web.config文件中'userSettings'下特殊配置部分的包裝類。您在設置編輯器中看到的所有設置實際上都保存在相應的配置文件中。 – Yogesh 2010-10-01 05:11:15

相關問題