Custom configuration file for different solution projects - c#

I have more than one solution projects for an application with using one app.config for each solution.
Can i do a separate configuration file (other than app.config) for common setting like db name (connection string) ?
Because currently i put these setting in each and every app.config file.

Please try following.
Create one config called "common.config" like below which will be common to all solutions and let's say it's located # "E:/myconfig". Please keep all common setting in this config.
<appSettings>
<add key="connstring" value="conn string value" />
</appSettings>
Now link this common config in you specific solution config lets say web.config using file attribute
<configuration>
<appSettings file="E:\myconfig\Common.config">
<add key="key1" value="value" />
</appSettings>
</configuration>
Hope this will work for you.

Related

How to read XML appSettings from external file?

There are a lot of similar questions and I have looked at every one I could find, to no avail.
I'm storing API keys for Google+ authentication in a .config file outside of my solution (in the same level as the solution folder).
I'm attempting to read the values back in Startup.Auth.cs, like so:
public void ConfigureAuth(IAppBuilder app)
{
app.UseGoogleAuthentication(new GoogleOAuth2AuthenticationOptions()
{
ClientId = WebConfigurationManager.AppSettings.Get("GoogleClientId"),
ClientSecret = WebConfigurationManager.AppSettings.Get("GoogleClientSecret")
});
}
Root Web.config:
<appSettings file="..\Secrets.config"> <!-- Path is correct, relative to Web.config -->
<add key="webpages:Version" value="3.0.0.0" />
<add key="webpages:Enabled" value="false" />
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>
Secrets.config:
<configuration>
<appSettings>
<add key="GoogleClientId" value="shh" />
<add key="GoogleClientSecret" value="shh" />
</appSettings>
</configuration>
in a .config file outside of my solution (in the same level as the solution folder).
An IIS application is totally unaware of any folders outside of its virtual application folder. There is no "at the same level as a solution file" in the context of a web application because the solution file is not deployed with it.
If you want to put appSettings outside of your application folder, your only built-in choices are the root web.config file, or machine.config file, which are both global to the machine (but specific to the .NET framework version you are running on). See ASP.NET Configuration File Hierarchy and Inheritance.
But just for the record, it is easiest to manage in the long run if you keep application settings in your application's web.config file. Eventually, you will need to change to/add a new web server and you might be scratching your head for a while trying to work out why the settings no longer work when that time comes if they need to be placed outside of your virtual application folder.
Remove the <configuration>...</configuration> tag from Secrets.config
Secrets.config:
<appSettings>
<add key="GoogleClientId" value="shh" />
<add key="GoogleClientSecret" value="shh" />
</appSettings>
Basically you make the appSettingssection the root of the external Secrets.config file.
The same can be done for connection strings using the configSource attribute except that...
Security - Unlike the Secrets.config file, the external connection
strings file must be in the same directory as the root web.config
file, so you'll have to take precautions to ensure you don't check it
into your source repository.
Also try using the ConfigurationManager
app.UseGoogleAuthentication(new GoogleOAuth2AuthenticationOptions()
{
ClientId = ConfigurationManager.AppSettings["GoogleClientId"],
ClientSecret = ConfigurationManager.AppSettings["GoogleClientSecret"]
});
Referencing articles where I learned about it
Scott Hanselman
Best practices for private config data and connection strings in configuration in ASP.NET and Azure
Official MS documentation
Best practices for deploying passwords and other sensitive data to ASP.NET and Azure App Service
Did you try to verify that the secrets.config is copied after the build?
Verify that by right clicking on the file and viewing the properties that the build action of the file is set to copy always.

Set different appSettings key in production server

How can I set a different value when I publish my MVC5 do production server?
Example:
In dev I have
<appSettings>
<add key="XLSFile" value="C:\\temp\\file.xls" />
</appSettings>
And when I publish the project I want to set a different path:
<appSettings>
<add key="XLSFile" value="C:\\projectname\\file.xls" />
</appSettings>
You'll want to use a config file transformation. Essentially you will override the config file for your release build.
For example:
<add key="XLSFile" value="C:\\projectname\\file.xls" xdt:Transform="Replace" xdt:Locator="Match(key)"/>
You can use two config files one with name web.Debug.config and second web.Release.config. First one for development and second for production server when published and now specify different value of key in both files as required

Mod_Mono doesn't load Web.Config AppSettings from configSource

I don't understand why Mono isn't loading appSettings from an external file. I've seen others' posts detailing how they've achieved this in .NET and Mono. However, I'm only able to get it working in .NET.
I've tried the configSource and file attributes of appSettings. The only way the appSettings seem to load is to move them into the main config file.
Here is the code I currently have.
web.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings configSource="data\app.config" />
...
</configuration>
app.config
<appSettings>
<add key="AdminIcon" value="96d6f2e7e1f705ab5e59c84a6dc009b2.png" />
<add key="MailPort" value="25" />
<add key="GAEnable" value="False" />
...
</appSettings>
Reading Settings for Code-Behind
using System.Web.Configuration;
string adminIcon = WebConfigurationManager.AppSettings["AdminIcon"].Value;
My web server is running Ubuntu. In order to fix the issue outlined above, I needed to change the path delimiter from \ to /.
<!--<appSettings configSource="data\app.config" />-->
<appSettings configSource="data/app.config" />
This is all find and dandy, but this will now break .NET on Windows. This is likely a system dependent issue and not specifically bound to Mono or .NET.

app.config in a Class Library - asp.net C#

I have a class library application and am unable to configure a CONFIG file. My app.config file:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="test" value="value test"/>
</appSettings>
</configuration>
and the call in my application:
var test = ConfigurationManager.AppSettings["test"];
But when I run, always passes a null value.
Class libraries do not use a .config file. Only applications (app.config) and web site s(web.config) read the "config" file.
The class library can use the Configuration Manager to read a value, but they must running inside of an app/web site.
In ASP.Net rename 'app.config' to 'web.config' and place it in the root folder of web site.
You have to put the appSettings tag in the web.config of your website in order to use ConfigurationManager.AppSettings["test"] if you do not want to do that then make the setting xml file and read it in your library code.
Add this code to the web.confg
<configuration>
<appSettings>
<add key="test" value="value test"/>
</appSettings>
</configuration>
And this is get value
var test = WebConfigurationManager.AppSettings["test"];
If you are passing string you may use
in webconfig
<appSettings>
<add key="test" value="value test"/>
</appSettings>
In cs.
String update = Convert.ToString(ConfigurationManager.AppSettings["test "]);
thank u all!
I used my config from my web application and solved the problem. It was something simple that I was complicating.

Split 'appSettings' section in several web.config files

I'm working on a ASP.NET project and I need to add some settings in appSettings section of my web-app.
Now these settings are growing up, so I'd like to organize them in different files. I've created other web.config files in different directories of my application, adding something like this:
<?xml version="1.0"?>
<configuration>
<system.web>
</system.web>
<appSettings>
<add key="settingKey" value="settingValue" />
</appSettings>
</configuration>
But when I try to access them via ConfigurationManager.AppSettings["settingKey"], I get null.
So, is it possible to split settings in different files? Is there another way to logically organize app settings values?
I know this is too old and probably doesn't even apply to .NET Core but for those coming from Google and using non-.NET Core json config files. Here's what I normally do...
I use configSources to take all config settings out of the web.config. This allows you to a specific config section to a different file by providing a relative location for example here's how you'd declare a configSource in a configuration section (in the root web.config file)...
<configuration>
<log4net configSource="Config\debug\log4net.config" />
<appSettings configSource="config\debug\settings.config" />
<connectionStrings configSource="config\debug\connections.config" />
...
</configuration>
You can name those files whatever you want, just make sure that the path specified and files exist in the solution. Here's what the settings.config file looks like...
<?xml version="1.0"?>
<appSettings>
<add key="webpages:Version" value="3.0.0.0" />
<add key="webpages:Enabled" value="false" />
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
<add key="foo" value="bar" />
</appSettings>
Now, the relative path is relative to the project root...
In picture above you can see that I have provided two different paths for different deployment environments, that's because obviously my conection strings and settings are different in production.
Then you can use configuration transformations so that the application can use the correct config files whether it is in debug or release mode...
This is what the Web.Debug.config file looks like...
<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<log4net configSource="Config\debug\log4net.config" xdt:Transform="Replace" />
<appSettings configSource="config\debug\settings.config" xdt:Transform="Replace" />
<connectionStrings configSource="config\debug\connections.config" xdt:Transform="Replace" />
</configuration>
The release one is pretty much the same...replace the paths provided to the configSource attributes.And that's pretty much it.
There are other web.config elements that support configSource settings such as many of the system.serviceModel children element.
You will only be able to see the web.config settings within a directory if the currently executing path is within that directory.
So for example:
/MyDirectory/web.config
is only visible if you are loading a page like:
/Mydirectory/MyTestPage.aspx
You would not see the web.config settings here for example:
/OtherDirectory/MyTestPage.aspx
This post may help:
Creating a custom .config file in asp.net

Categories

Resources