2016-10-28 77 views
0

我有四個項目 - 項目1,項目2等的解決方案。每個項目都有一個app.config文件。我想引用從項目4 System.Configuration.ConfigurationManager.ConnectionStrings在呼叫從項目1.使用多個項目獲取連接字符串C#SQL Server

所以在項目1,我有:

 UtilitiesClass util = new UtilitiesClass(); 
     string connectionString = util.getConnectionString(); 

在項目4個,我有一個公用:

public string getConnectionString() 
    { 
     string cx = System.Configuration.ConfigurationManager.ConnectionStrings["Shared Items.Properties.Settings.ConnectionString"].ConnectionString; 
     return (cx); 
    } 

我得到的錯誤是連接字符串爲空。我從Project 4獨立運行它,並且它沒有錯誤地獲取連接字符串。

+0

謝謝,斯圖爾特。那麼,如何改變我的實用程序來使用參數來指定我想要使用的配置文件? – Missy

+1

按項目你的意思是數據庫?據我瞭解,你有一個應用程序處理數據庫?您正試圖實施一種多租戶應用程序? – kat1330

+1

你不能,它總是加載啓動項目配置。 – stuartd

回答

1

一般來說,除了「入口點項目」 - 即由IIS加載的項目之外,您不能在任何應用程序配置讀取器中使用它。這裏的最佳實踐是讓「入口點項目」讀取其應用程序設置文件,並通過某種服務類將其提供給應用程序的其餘部分。

它是「最佳實踐」的原因是,您可以在不依賴外部文件(當然每個測試部署只有一組屬性)的情況下對您的子項目和類進行單元測試。通過在入口點設置參數 - 在本例中爲測試用例,您可以同時測試多種配置。

+0

這是一個好主意。我正在製作一個表格應用程序。我猜測同樣適用? – Missy

+0

是的。應用程序配置應該由應用程序入口點讀取,然後提供給應用程序的其餘部分 - 應用程序的其餘部分根本不應該知道配置文件的存在。 – PhillipH

1

您可以嘗試向項目添加資源文件(.resx),添加連接字符串並將其可訪問性更改爲公共,以便您可以通過項目使用它。希望這可以幫助你

+0

謝謝,這真是個好主意。你認爲我可以像config.app那樣加密嗎? – Missy

+1

但是RESX被編譯到應用程序中。這首先消除了在外部文件中具有設置的好處。有人可能會在代碼中使用連接字符串作爲常量。 – PhillipH

+0

@PhillipH如果有人使用反彙編程序或反編譯程序,那麼這兩者中的任何一個都可能會被看到 - 是的? – Missy