2012-01-16 55 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