2012-01-16 74 views
0

我試圖在我的課中拉一些關鍵/值。這是一個C#類庫項目(不是web項目),所以它有一個App.Config。C#項目和配置文件

在我的C#項目(類庫),得到如下:

1)的實用方法從配置文件中提取一個鍵/值:

public class ConfigUtil 
{ 
    /// <summary> 
    /// Utility method to retrieve configuration setting values. 
    /// </summary> 
    /// <param name="configKey">Configuration Settings key to retrieve.</param> 
    /// <returns>empty string if key is null</returns> 
    public static string GetAppConfigSetting(string configKey) 
    { 
     return ConfigurationManager.AppSettings[configKey] ?? string.Empty; 
    } 
} 

此實用工具方法是在一個web項目中使用,我只是複製並粘貼到我的C#項目這個漂亮的助手,因爲我需要這些身份驗證和端點爲我的C#項目中的一些代碼中的第三方API authing。

2)甲Config.cs牽我查找

class Config 
{ 
    public static string SomeThirdPartyApiEndpoint 
    { 
     get { return ConfigUtil.GetAppConfigSetting("SomeThirdPartyApiEndpoint"); } 
    } 

    public static string SomeThirdPartyApiAuthUsername 
    { 
     get { return ConfigUtil.GetAppConfigSetting("SomeThirdPartyApiAuthUsername"); } 
    } 

    public static string SomeThirdPartyApiAuthPassword 
    { 
     get { return ConfigUtil.GetAppConfigSetting("SomeThirdPartyApiAuthPassword"); } 
    } 
} 

3)以我App.Config中,鍵/值:

<appSettings> 
    <add key="SomeThirdPartyApiEndPoint" value="http://someEndPointUrl.com/XMLAPI" /> 
    <add key="SomeThirdPartyApiAuthUsername" value="someUserNameHere" /> 
    <add key="SomeThirdPartyApiAuthPassword" value="5233s54" /> 
    </appSettings> 

4)一些示例代碼在我的課程之一,在這個項目試圖拉一個關鍵值:

string password = Config.SomeThirdPartyApiAuthUsername; 

這條線是我的一個類的方法。

問題:它沒有找到我的任何鍵/值。當我調試時,我得到一個空密碼的字符串。

我假設我這樣做是正確的,因爲這些鍵/值需要放在我的App.Config中,因爲我沒有web.config,因爲這不是一個Web項目。這是我創建的包裝項目,用於將調用包裝到第三方API。

另一個問題:那麼如果Web.config不存在,ConfigurationManager.AppSettings會查找App.Config嗎?我想知道這是怎麼配置管理器拉...它只查找web.configs或任何可用的立即項目中的.config?

+0

相關問題令人困惑......這是一個Web項目還是一個Windows項目? ASP.NET項目從web.config獲取它們的設置... – Skyrim 2012-01-16 06:16:57

+0

只是一個C#項目...普通的類庫項目 – PositiveGuy 2012-01-16 06:22:51

+0

好的,那麼我就根據它部署的環境來決定使用哪個配置文件。您應該測試它,因爲創建示例項目不需要很長時間。另外,請查看我的解決方案:) – Skyrim 2012-01-16 06:24:56

回答

1

我相信ConfigurationManager.AppSettings看起來正在運行的程序的配置文件中如果這是一個庫項目,則需要將所需的設置添加到主機的配置文件中。

+0

所以主持人將是我的項目本身。例如,這個項目是一個包裝項目,我用創建api調用一個服務引用第三方API的類來創建。所以我在我的包裝方法中放置了一些我需要的字符串API調用來從該項目中的App.Config引用... – PositiveGuy 2012-01-16 06:23:55

+0

主機將是您正在運行的程序。它可以是一個網站,一個網絡服務,一個Windows程序或一個命令行程序。 – 2012-01-16 06:26:38

+0

你是對的,是的,它正在看我的測試項目中的app.config,它正在消耗我上面討論的項目。謝謝。 – PositiveGuy 2012-01-16 06:28:10

0

SomeThirdPartyApiUsername應該SomeThirdPartyApiAuthUsername


public static string SomeThirdPartyApiAuthUsername 
{ 
    get { return ConfigUtil.GetAppConfigSetting("SomeThirdPartyApiAuthUsername"); } 
} 

但你的關鍵是

"SomeThirdPartyApiUsername" 
+0

或其他方式取決於你想要哪個名字 – Skyrim 2012-01-16 06:15:24

+0

抱歉只是發佈錯誤...我會更新。問題依然存在。 – PositiveGuy 2012-01-16 06:24:10

+0

@CoffeeAddict - gotcha ... – Skyrim 2012-01-16 06:26:12