在应用程序文件夹外部读取单独的web.config文件

时间:2018-03-20 07:16:54

标签: c# asp.net config

我需要在应用程序的文件夹(位于任何其他目录中)之外阅读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键。尝试从Key集合中读取任何Settings时,会出现此错误。

有没有办法从应用程序文件夹外的AppSettings文件加载web.config个密钥。

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

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

<?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。

3 个答案:

答案 0 :(得分:3)

您可以使用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;

答案 1 :(得分:1)

阅读文档:ConfigurationManager.OpenExeConfiguration on MSDN

public static Configuration OpenExeConfiguration(
    string exePath
)
  

这是EXE路径

答案 2 :(得分:1)

据我所知,您希望在同一台计算机上的多个应用程序中进行某种共享配置。您可以考虑使用这样的外部文件:

<?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>