473,385 Members | 1,856 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,385 software developers and data experts.

app.config

I'm working in VS2003.NET, with C#.

I use app.config to store the connection string to my SQL Server. This
works fine.

Lately I've been taking work home where the connection string is
different. I deal with this by having app.config.home and
app.config.work files which I copy over the app.config file as required
by my location.

I was wondering if there is another way to do this. In my Microsoft.NET
file system hierarchy I notice a CONFIG directory with a machine.config
file in it. Said machine.config file has an example appSettings section
in it.

Would that be an appropriate place to store my SQL Server connection
string? How would I access it? I currently say
'ConfigurationSettings.AppSettings["strCon"]'. How would that change?

Thank you,

-- Rick
Jul 21 '05 #1
4 20156
Rick,
I would recommend a single app.config file. Within this single app.config
have custom sections that identify distinct 'environments' (home or work).

There is a predefined configSections section in the app.config that you use
to define new sections.

Something like:

<configuration>

<configSections>
<section name="myClass1Stuff"
type="System.Configuration.DictionarySectionHandle r, System" />
<sectionGroup name="environments">
<section name="work"
type="System.Configuration.SingleTagSectionHandler , System" />
<section name="home"
type="System.Configuration.SingleTagSectionHandler , System" />
</sectionGroup>
</configSections>

<appSettings>
<add key="key1" value="value1" />
<add key="environment" value="work" />
</appSettings>

<myClass1Stuff>
<add key="key1" value="value1" />
</myClass1Stuff>

<environments>
<work value1="xyz" value2="abc" value3="edf" value4="ghi" />
<home value1="xyz" value2="abc" value3="edf" value4="ghi" />
</environments>

</configuration>

If you inherit from DictionarySectionHandler you can easily change the key
or value in your section. I've derived from DictionarySectionHandler to
change key/value to plugin/type in a few of my projects.

I use the above environments section to define each of my environments,
Production, QA, Test, Development. Where each environment points to the
correct database servers, web servers, message queues, printers any 'per
environment' settings. The appSettings/environment setting is used to
identify the current environment in use. Instead of value1, value2, value3,
value4. I would have connectionString, printer, messageQueue and such that
are distinct per environment.

You then need to use System.Configuration.ConfigurationSettings.GetConf ig to
get your section, which returns an object based on the type of section
handler defined for that section (usually HashTable, but can be other object
types.

See the following on how to create new sections via the configSections
section.

http://msdn.microsoft.com/library/de...onhandlers.asp

and:
http://msdn.microsoft.com/library/de...ionsschema.asp

Also read about the System.Configuration.ConfigurationSettings class and
other classes in the System.Configuration namespace.

If you define a distinct enough custom section you could put it in the
machine config, however I would put it under something other than
appSettings, as all applications can read appSettings (technically All .NET
applications can read all sections of machine config). If I were to put a
custom section in machine.config I would more than likely use the namespace
for my assembly as the custom section name. For the above I would define a
custom section to hold which environment I was using, then

Hope this helps
Jay
"Guinness Mann" <GM***@dublin.com> wrote in message
news:MP***********************@news.newsguy.com...
I'm working in VS2003.NET, with C#.

I use app.config to store the connection string to my SQL Server. This
works fine.

Lately I've been taking work home where the connection string is
different. I deal with this by having app.config.home and
app.config.work files which I copy over the app.config file as required
by my location.

I was wondering if there is another way to do this. In my Microsoft.NET
file system hierarchy I notice a CONFIG directory with a machine.config
file in it. Said machine.config file has an example appSettings section
in it.

Would that be an appropriate place to store my SQL Server connection
string? How would I access it? I currently say
'ConfigurationSettings.AppSettings["strCon"]'. How would that change?

Thank you,

-- Rick

Jul 21 '05 #2
Jay,

Perhaps I'm dense, but my objective is to be able to zip up a project,
take it home, and run it without change. As near as I can tell, this
solution just pushes the problem of what to edit to someplace else. (I
haven't figured out where, yet :-) )

You say:
all applications can read appSettings (technically All .NET
applications can read all sections of machine config).
Actually, that sounds perfect to me. At work, all applications need to
access the same SQL Server. Likewise at home. I can see where in a
more complex environment with more servers it would be a problem.

So then, when I call System.Configuration.AppSettins["section"] does it
search for "section" in both places: app.config and machine.config?

-- Rick
In article <eZ*************@TK2MSFTNGP11.phx.gbl>,
Ja********@email.msn.com says... Rick,
I would recommend a single app.config file. Within this single app.config
have custom sections that identify distinct 'environments' (home or work).

There is a predefined configSections section in the app.config that you use
to define new sections.

Something like:

<configuration>

<configSections>
<section name="myClass1Stuff"
type="System.Configuration.DictionarySectionHandle r, System" />
<sectionGroup name="environments">
<section name="work"
type="System.Configuration.SingleTagSectionHandler , System" />
<section name="home"
type="System.Configuration.SingleTagSectionHandler , System" />
</sectionGroup>
</configSections>

<appSettings>
<add key="key1" value="value1" />
<add key="environment" value="work" />
</appSettings>

<myClass1Stuff>
<add key="key1" value="value1" />
</myClass1Stuff>

<environments>
<work value1="xyz" value2="abc" value3="edf" value4="ghi" />
<home value1="xyz" value2="abc" value3="edf" value4="ghi" />
</environments>

</configuration>

If you inherit from DictionarySectionHandler you can easily change the key
or value in your section. I've derived from DictionarySectionHandler to
change key/value to plugin/type in a few of my projects.

I use the above environments section to define each of my environments,
Production, QA, Test, Development. Where each environment points to the
correct database servers, web servers, message queues, printers any 'per
environment' settings. The appSettings/environment setting is used to
identify the current environment in use. Instead of value1, value2, value3,
value4. I would have connectionString, printer, messageQueue and such that
are distinct per environment.

Jul 21 '05 #3
Rick,
So then, when I call System.Configuration.AppSettins["section"] does it
search for "section" in both places: app.config and machine.config?
ConfigurationSettings reads machine.config first, then it "merges" what is
in app.config. I understand that it physically reads the config files once,
and caches the results returned from ConfigurationSettings.GetConfig,
avoiding extra overhead of continually reading & searching the files.

This merging allows app.config to override what is in machine.config. It is
also part of the reason that every thing in appSettings is normally <add>,
it can be <remove> or <clear>

What I tried to say at the bottom of my response is if you use
machine.config DO NOT USE appSettings. Define your own custom section,
similar to the "environments" section in my example, just make sure you name
the section for the namespace of your assembly. Also make sure this name
follows the .NET guide lines (company.TehcnologyName).

http://msdn.microsoft.com/library/de...guidelines.asp

To minimize interfering with future .NET upgrades and other class libraries
that may be installed.

Hope this helps
Jay
"Guinness Mann" <GM***@dublin.com> wrote in message
news:MP************************@news.newsguy.com.. . Jay,

Perhaps I'm dense, but my objective is to be able to zip up a project,
take it home, and run it without change. As near as I can tell, this
solution just pushes the problem of what to edit to someplace else. (I
haven't figured out where, yet :-) )

You say:
all applications can read appSettings (technically All .NET
applications can read all sections of machine config).


Actually, that sounds perfect to me. At work, all applications need to
access the same SQL Server. Likewise at home. I can see where in a
more complex environment with more servers it would be a problem.

So then, when I call System.Configuration.AppSettins["section"] does it
search for "section" in both places: app.config and machine.config?

-- Rick
In article <eZ*************@TK2MSFTNGP11.phx.gbl>,
Ja********@email.msn.com says...
Rick,
I would recommend a single app.config file. Within this single app.config have custom sections that identify distinct 'environments' (home or work).
There is a predefined configSections section in the app.config that you use to define new sections.

Something like:

<configuration>

<configSections>
<section name="myClass1Stuff"
type="System.Configuration.DictionarySectionHandle r, System" />
<sectionGroup name="environments">
<section name="work"
type="System.Configuration.SingleTagSectionHandler , System" />
<section name="home"
type="System.Configuration.SingleTagSectionHandler , System" />
</sectionGroup>
</configSections>

<appSettings>
<add key="key1" value="value1" />
<add key="environment" value="work" />
</appSettings>

<myClass1Stuff>
<add key="key1" value="value1" />
</myClass1Stuff>

<environments>
<work value1="xyz" value2="abc" value3="edf" value4="ghi" />
<home value1="xyz" value2="abc" value3="edf" value4="ghi" />
</environments>

</configuration>

If you inherit from DictionarySectionHandler you can easily change the key or value in your section. I've derived from DictionarySectionHandler to
change key/value to plugin/type in a few of my projects.

I use the above environments section to define each of my environments,
Production, QA, Test, Development. Where each environment points to the
correct database servers, web servers, message queues, printers any 'per
environment' settings. The appSettings/environment setting is used to
identify the current environment in use. Instead of value1, value2, value3, value4. I would have connectionString, printer, messageQueue and such that are distinct per environment.

Jul 21 '05 #4
[This followup was posted to microsoft.public.dotnet.general and a copy
was sent to the cited author.]

In article <Of**************@TK2MSFTNGP10.phx.gbl>,
Ja********@email.msn.com says...
ConfigurationSettings reads machine.config first, then it "merges" what is
in app.config. I understand that it physically reads the config files once,
and caches the results returned from ConfigurationSettings.GetConfig,
avoiding extra overhead of continually reading & searching the files.
...
Hope this helps


Thanks, Jay. That was just right!

-- Rick

Jul 21 '05 #5

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

13
by: Maxim Khesin | last post by:
I want to have a config file with my python proggie, satisfying the following requirements: 1) support key->(value, default) 2) simple and intuitive to read and edit 3) easyly readable into a...
4
by: Fuzzyman | last post by:
There have been a couple of config file 'systems' announced recently, that focus on building more powerful and complex configuration files. ConfigObj is a module to enable you to much more *simply*...
3
by: Richard Lewis Haggard | last post by:
I have a test application that is calling an assembly that reads some strings out of a config file. Normally, this assembly supports a web application and the information can be read just fine....
13
by: Khodr | last post by:
Hello, I am using VS.NET 2003 and vb. I build my application MyApp and it generates MyApp.exe.config. So now MyApp.exe reads parameters from MyApp.exe.config. Great and no problem! I need to...
20
by: tomerfiliba | last post by:
hey i've been seeing lots of config-file-readers for python. be it ConfigObj (http://www.voidspace.org.uk/python/configobj.html) or the like. seems like a trend to me. i came to this conclusion...
11
by: TARUN | last post by:
Hello All I need to ask about the configuration file in .NET, There are Two config File 1. Web Config 2. Machine config I understand the the usage of Web config , but not able to understand...
12
by: dbuchanan | last post by:
Hello, (Is this the proper newsgroup?) === Background === I am building a solution with two projects. One project is my data access layer which contains my DataSet as an xsd file. The XSD...
5
by: mmcd79 | last post by:
I built a VB.net application that makes use of a machine level DB connection string setting, and a user level starting location setting. The machine level setting and the default user based...
10
by: eagle | last post by:
I have a web.config in my application that contains the connection strings to all my datasources. I want to move these connection strings to another web config up the folder hierarchy so that all...
5
by: =?Utf-8?B?SmVycnkgQw==?= | last post by:
I have a app that uses several membership/role providers. I can list these Providers with the code: Dim rootWebConfig1 As Configuration rootWebConfig1 =...
0
by: taylorcarr | last post by:
A Canon printer is a smart device known for being advanced, efficient, and reliable. It is designed for home, office, and hybrid workspace use and can also be used for a variety of purposes. However,...
0
by: Charles Arthur | last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
0
by: ryjfgjl | last post by:
If we have dozens or hundreds of excel to import into the database, if we use the excel import function provided by database editors such as navicat, it will be extremely tedious and time-consuming...
0
by: ryjfgjl | last post by:
In our work, we often receive Excel tables with data in the same format. If we want to analyze these data, it can be difficult to analyze them because the data is spread across multiple Excel files...
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...
0
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
0
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.