M_Idrees
M_Idrees

Reputation: 2172

Read separate web.config file outside the application folder

I need to read web.config file, outside the application's folder (located in any other directory). I tried this code:

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

But it is giving me the error:

Object reference not set to an instance of an object.

Because here, c1.AppSettings is an object, but c1.AppSettings.Settings contains not items (hence 0 Count). It is not really loading the AppSettings keys. When trying to read any Key from Settings collection, it gives this error.

Is there any way how to load AppSettings keys from a web.config file outside the application folder.

If I put same file within application folder, then it reads the keys successfully.

This is my sample config file's content:

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

I have a web application already running on my server. And I need to develop a small utility which has to do some job in database, and I don't want to write db credentials or connection string(and some other additional app-settings) in each application, I want it to read same thing from web.config.

Upvotes: 6

Views: 4958

Answers (3)

Guillaume Raymond
Guillaume Raymond

Reputation: 1824

As I understand from your comment you want some kind of shared configuration accross multiple app on the same computer. You may consider using external file like this :

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

in above .config example connectionStrings is sourced from an other file. Below an example what can be such an external config file:

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

Upvotes: 2

yaakov
yaakov

Reputation: 5850

You can using ConfigurationManager to read arbitrary configuration files by opening a mapped exe configuration as follows:

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;

Upvotes: 6

Oleksii Klipilin
Oleksii Klipilin

Reputation: 1936

Read documentation: ConfigurationManager.OpenExeConfiguration on MSDN

public static Configuration OpenExeConfiguration(
    string exePath
)

This is EXE path

Upvotes: 1

Related Questions