【问题标题】:C# Projects and Config FilesC# 项目和配置文件
【发布时间】:2012-01-16 06:11:30
【问题描述】:

我正在尝试在我的班级中提取一些键/值。这是一个 C# 类库项目(不是 Web 项目),所以它有一个 App.Config。

在我的 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 进行身份验证。

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;

这一行在我的一个类方法中。

问题:它没有找到我的任何键/值。当我调试时,我得到一个空字符串作为密码。

我认为我这样做是正确的,因为我没有 web.config,因为这不是 Web 项目,所以这些键/值需要放在我的 App.Config 中。这是我创建的包装器项目,用于包装对第三方 API 的调用。

另一个相关问题:那么如果 Web.config 不存在,ConfigurationManager.AppSettings 会寻找 App.Config 吗?我想知道这个 ConfigurationManager 是如何拉动的……它是否只查找 web.configs 或直接项目中可用的任何 .config?

【问题讨论】:

  • 相关问题令人困惑......这是一个Web项目还是一个Windows项目? ...ASP.NET 项目从 web.config 获取它们的设置...
  • 只是一个 C# 项目...普通类库项目
  • 好的,那么我猜测根据它所部署的环境,它将使用可用的配置文件。您应该对其进行测试,因为创建示例项目不需要很长时间。另外,请查看我的解决方案:)
  • 已更新以修复 SomeThirdPartyApiAuthUsername...现在是一致的
  • 是的,事实上这就是我想要做的就是测试它。所以我创建了一个测试项目(另一个 C# 类库项目)。然后在我的测试项目中引用了这个项目。开始运行一些测试..它命中了您在我的主项目中看到的上面那行代码......它在它试图寻找的任何 .config 中都找不到这些字符串。所以也许我需要在我的测试项目中添加一个配置文件......比如 App.config 或其他东西并将字符串移动到那里?抱歉,我对测试有点陌生。

标签: c#


【解决方案1】:

我相信 ConfigurationManager.AppSettings 会查看正在运行的程序的配置文件。如果这是一个库项目,您需要将您想要的设置添加到主机的配置文件中。

【讨论】:

  • 所以主机就是我的项目本身。例如,这个项目是我创建的一个包装器项目,它使用对第三方 API 的服务引用进行 api 调用的类。所以我在我的包装方法 api 调用中放置了一些我需要的字符串,以便从这个项目中的 App.Config 中引用......
  • 主机将是您正在运行的程序。它可以是网站、Web 服务、Windows 程序或命令行程序。
  • 你是对的,是的,它正在查看我的测试项目中的 app.config,它正在消耗我上面所说的项目。谢谢。
【解决方案2】:

对于除silverlight 之外的任何类型的.Net 应用程序,配置值是通过在C# 中使用ConfigurationManager.AppSettings["key"] 来检索的,而在silverlight 中,我们必须借助xmlreader 来读取配置条目。更多检查请参考ConfigurationManager.AppSettings["KEYNAME"] is Null

【讨论】:

  • 谢谢,因为我还没有做过任何 Silverlight,所以很高兴知道。
【解决方案3】:

SomeThirdPartyApiUsername 应该是 SomeThirdPartyApiAuthUsername


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

但你的钥匙是

"SomeThirdPartyApiUsername"

【讨论】:

  • 或其他方式取决于您想要的名称
  • 抱歉只是发帖错误...我会更新的。问题依然存在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-14
  • 1970-01-01
  • 2011-08-13
  • 2011-07-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多