【问题标题】:Read separate web.config file outside the application folder在应用程序文件夹之外读取单独的 web.config 文件
【发布时间】:2018-08-28 22:06:02
【问题描述】:

我需要阅读应用程序文件夹之外的web.config 文件(位于任何其他目录中)。 我试过这段代码:

string filePath = @"C:\Users\Idrees\Downloads\New folder\Web.config";
Configuration c1 = ConfigurationManager.OpenExeConfiguration(filePath);
var value1 = c1.AppSettings.Settings["Key1"].Value;

但它给了我错误:

对象引用未设置为对象的实例。

因为这里c1.AppSettings 是一个对象,但c1.AppSettings.Settings 不包含项目(因此0 计数)。它并没有真正加载AppSettings 键。当尝试从Settings 集合中读取任何Key 时,会出现此错误。

有什么方法可以从应用程序文件夹外的web.config 文件中加载AppSettings 密钥。

如果我将相同的文件放在应用程序文件夹中,那么它会成功读取密钥。

这是我的示例配置文件的内容:

<?xml version="1.0" encoding="utf-8"?>
<!--             
  For more information on how to configure your ASP.NET application, please visit 
  http://go.microsoft.com/fwlink/?LinkId=169433    
  -->
<configuration>        
  <connectionStrings>        
    <!--here goes my connection strings-->
  </connectionStrings>
  <appSettings>
    <add key="Key1" value="Value1" />
    <add key="Key2" value="Value2" />
    <add key="Key3" value="Value3" />
  </appSettings>

</configuration>

我的服务器上已经运行了一个 Web 应用程序。而且我需要开发一个小型实用程序,它必须在数据库中完成一些工作,并且我不想在每个应用程序中编写数据库凭据或连接字符串(以及其他一些额外的应用程序设置),我希望它读取相同的内容来自 web.config。

【问题讨论】:

  • 改用 XDocument 类?
  • 感谢@DevC。有什么原因我们无法使用 ConfigurationManager 类读取?
  • 您只需要那个 web.config 来加载应用程序设置吗?如果是这种情况,为什么不使用 json 文件并对其进行解析?
  • 我的服务器上已经运行了一个 Web 应用程序。现在我需要开发一个小型实用程序,它必须在数据库中完成一些工作,并且我不想在每个应用程序中编写数据库凭据或连接字符串(以及其他一些其他应用程序设置),我希望它读取相同的内容来自 web.config。
  • @M_Idrees 我认为您的最后一条评论可以添加到您的问题中,因为它让我们知道您真正想要什么

标签: c# asp.net config


【解决方案1】:

您可以使用ConfigurationManager通过打开一个映射 exe配置来读取任意配置文件,如下所示:

var filePath = @"C:\Users\Idrees\Downloads\New folder\Web.config";
var fileMap = new ExeConfigurationFileMap { ExeConfigFilename = filePath };
var configuration = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
var value = configuration.AppSettings.Settings["Key1"].Value;

【讨论】:

    【解决方案2】:

    我从您的评论中了解到,您希望在同一台计算机上的多个应用程序之间进行某种共享配置。您可以考虑使用这样的外部文件:

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <startup> 
          <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
      </startup>
    
      <connectionStrings configSource="config\connString01.config"/>
    
      <appSettings file="config\config01.config">
        <add key="Var3" value="Var3 value from main config file"/>
      </appSettings>
    

    在上面的 .config 示例中,connectionStrings 来自其他文件。下面的示例可以是这样的外部配置文件:

    <connectionStrings>
      <add name="SQLConnectionString01" connectionString="Data Source=sourcename01;Initial Catalog=cat01;Persist Security Info=True;Integrated Security=true;"/>
    </connectionStrings>
    

    【讨论】:

    • 感谢分享另一个选项。
    【解决方案3】:

    阅读文档:ConfigurationManager.OpenExeConfiguration on MSDN

    public static Configuration OpenExeConfiguration(
        string exePath
    )
    

    这是EXE路径

    【讨论】:

    • 我认为,如果这是文件路径/文件名问题,那么它甚至应该无法从文件中读取。它应该在加载的第一行给出错误。
    • @M_Idrees 你不用猜,你有文档
    • 这是否意味着无法使用 ConfigurationManager 类从控制台应用程序中读取 web.config 文件?或者它可能在 ConfigurationManager 类中提供了一些其他替代方案,但我可能使用了错误的功能?
    猜你喜欢
    • 2018-09-11
    • 1970-01-01
    • 1970-01-01
    • 2016-05-27
    • 1970-01-01
    • 2015-02-09
    • 2012-01-25
    • 1970-01-01
    • 2012-11-27
    相关资源
    最近更新 更多