【问题标题】:How to use app config of an imported C# project如何使用导入的 C# 项目的应用程序配置
【发布时间】:2012-03-25 18:52:51
【问题描述】:

我正在使用 Visual Studio 2010 和 C# 4.0。我有一个向 Web 服务公开接口的项目。它有一个 app.config 定义了 web 服务的绑定。我想将此项目公开为供其他客户使用的库。

但是,当我尝试在客户端项目(例如控制台应用程序)中导入此库项目时,我收到错误消息,因为它找不到与 Web 服务关联的任何配置文件。

有没有办法在我的库项目中使用 app.config,这样我的客户就可以使用它而无需定义自己的配置文件?

【问题讨论】:

  • 顺便说一句,这重复了很多次!

标签: c# visual-studio-2010 app-config


【解决方案1】:

你稍微改变一下库项目怎么样:

  1. 将库项目构建操作中的 app.config 更改为“嵌入式资源”。
  2. 在读取配置时更改代码,检查配置是否存在,如果不存在,则将嵌入式资源中的 app.config 提取到当前文件夹,然后使用ConfigurationManager.OpenMappedExeConfiguration 之类的内容来读取它。

之后任何使用这个库的项目应该可以不用担心这些设置了。

【讨论】:

  • 问题是,如果您没有足够的权限写入该文件夹,它将无法正常工作,这是作为非管理员用户的 Program File -> 将文件写入 AppData 和从那里阅读。
【解决方案2】:

首先创建一个如下所示的实用程序函数。该函数应该位于可以从您的 Web 服务(当然还有您的主项目)调用的库或类中。最好在您的网络服务中添加对该库的引用。

    public static string GetAppConfigValue(string key)
    {
        return ConfigurationManager.AppSettings[key] ?? GetAppConfigValue(GetAppConfigFileName(), key);
    }

    private static string GetAppConfigValue(string appConfigFileName, string key)
    {
        ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
        fileMap.ExeConfigFilename = appConfigFileName;
        Configuration appConfig = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
        return appConfig.AppSettings.Settings[key].Value;
    }

现在,如果您可以从主项目调用 GetAppConfigValue(string),它会返回缓存的 app.config 的值,因为它是它自己的配置文件。当它返回映射的配置设置时,您还可以从 Web 服务项目调用公共函数。这里的棘手部分是正确提供配置文件的完整路径!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-09
    • 1970-01-01
    • 2013-06-09
    • 1970-01-01
    • 2023-03-10
    相关资源
    最近更新 更多