Nick Kahn
Nick Kahn

Reputation: 20078

ConfigurationManager.AppSettings getting null?

I did not realize that: 'have a web.config in a separate class library and' was reading the web.config app setting from different web application.

I am using VS2010 target framework 3.5

I don't know what is wrong here but I am getting null when I try to get ConfigurationManager.AppSettings["StoreId"];

private string _storeid = GetStoreId;

public static string GetStoreId
{
    get
    {
        return ConfigurationManager.AppSettings["StoreId"];
    }
}

web.config:

<appSettings>
    <add key="StoreId" value="123" />
</appSettings>

Upvotes: 58

Views: 129134

Answers (13)

Jeremy Thompson
Jeremy Thompson

Reputation: 65554

Update

You can have an AfterTargets in your CsProj file that copies the config:

<Target Name="CopyAppConfig" AfterTargets="Build" DependsOnTargets="Build">
    <CreateItem Include="$(OutputPath)$(AssemblyName).dll.config">
         <Output TaskParameter="Include" ItemName="FilesToCopy"/>
    </CreateItem>
    <Copy SourceFiles="@(FilesToCopy)" DestinationFiles="$(OutputPath)testhost.dll.config" />
</Target>

Problem

The usual cause for this is due to context.

Cause

When you have a solution with two projects, if the App/Web.Config is in the main project it wont work if the context of the running application is the second project such as a library, unit test, etc.

Conundrum

To read values from the config in other projects (with System.Configuration) you'll need to move/copy the config file to the project with the running context. Unfortunately duplicating files defeats the tenants of good programming; OOP, Source Code Management, SOLID, etc.

Cool Solution

A nifty solution is adding config file shortcuts in other projects so you only update one file:

enter image description here

It would be nice to divide the contents of config files across project's. Elegantly, like Sharing Assembly Files as per answer #2: https://stackoverflow.com/a/15319582/495455 but alas it's by context

Upvotes: 23

Larry Cummins
Larry Cummins

Reputation: 119

string setting = ConfigurationManager.AppSettings["Setting"];
  1. Make sure config file is in the same folder as code referencing it. Create a helper class if it is not. Duplicating this could cause confusion should someone forget it exists in two places.
  2. Keep app settings in an app.config and not a web.config for AppSettings.I had this issue with a key in the web.config.

Upvotes: 0

GaTechThomas
GaTechThomas

Reputation: 6076

In Visual Studio, right-click on the config file, select Properties, and then change "Copy to Output Directory" to either "Copy always" or "Copy if newer".

Alternatively, manually add the following section as a child of the element in your .csproj file (this one is for "Copy always" for file "App.config"):

  <ItemGroup>
    <None Update="App.config">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </None>
  </ItemGroup>

Upvotes: 2

Oranit Dar
Oranit Dar

Reputation: 1725

Happened to me just now, only when calling it from another project. Apparently, at the other project, the reference has not been defined as a Service Reference but rather as a Connected Service. I deleted the reference and added it again.

Upvotes: 0

Jeff Kaminski
Jeff Kaminski

Reputation: 11

I tried all of these solutions but none worked for me. I was attempting to use a 'web.config' file. Everything was named correctly and the files were in the proper location, but it refused to work. I then decided to rename my 'web.config' file to 'app.config' and just like that, it worked.

So if you are having this issue with a 'web.config' file be sure to rename it to 'app.config'.

Upvotes: 1

MJ X
MJ X

Reputation: 9054

I agree with above answer and I would like to add few more points

  1. you should make sure you don't put space before and after the : see code below:

    private static string Client_ID = ConfigurationManager.AppSettings["ida:ClientId"];
    

    if you put space between ida: ClientId it will not work and will return null

  2. make sure your key value names are correct

  3. you can try WebConfigurationManager

Upvotes: 0

thatOneGuy
thatOneGuy

Reputation: 10612

I got this problem as I copied a project from the file explorer and renamed the project. This copied the Debug folder and as I didn't have it set to 'Copy if newer' it didn't overwrite the old App.config file.

Just delete the Debug folder and rebuild. Hope that helps someone.

Upvotes: 0

Ben
Ben

Reputation: 2269

If you are UNIT TESTING you need A COPY of the APP.CONFIG inside the UNIT TEST PROJECT

Upvotes: 68

eRaisedToX
eRaisedToX

Reputation: 3361

Disclaimer ;) This post is not to answer OP as it is too late but definitely it would help the readers who end up to this page.

Problem I faced : ConfigurationManager.AppSettings["uName"] returning null in my C# web api project.

Basic Things I checked for :

1) In code ConfigurationManager.AppSettings["uName"] , I was using exact key 'uName' as I had in web.config file,

i.e

<appSettings>
      <add key="uName" value="myValue" />
</appSettings>

Checked that I haven't mis typed as userName instead of uName etc.

2) Since it is a Web API project it would have a file as web.config instead of app.config , and that too in root folder of your project. [refer the image].

enter image description here

Solution :

The solution that worked for me ,

Changed ConfigurationManager.AppSettings["uName"] to WebConfigurationManager.AppSettings["uName"]

and

made sure that I had

<appSettings>
          <add key="uName" value="myValue" />
</appSettings>

in the right file ie.

Right file is not web.config in View folder

neither the debug or release web.config

enter image description here

Upvotes: 11

Markus
Markus

Reputation: 1211

App settings are loaded into ConfigurationManager.AppSettings, but User settings (in Properties settings in your project properties) are not.

Upvotes: 2

bobbins
bobbins

Reputation: 31

This happened to me when I was testing a Class Library (.dll). They were both in the same project but the App.config for the library had the settings I needed. The App I had written to test needed the settings because it was running the library.

Upvotes: 0

zaheer ahmad
zaheer ahmad

Reputation: 294

I just got answer DLL are called from another project not in the project where there are create.so entries in App.config should b move to calling project config file.

For example i have 2 project in my solution one class library and other console application.i have added class library reference in Console application.So if i add app.config file in class library project it through null exception.it works when i added app.config in console application.Hope it works

Upvotes: 2

Darin Dimitrov
Darin Dimitrov

Reputation: 1038810

and:

<appSettings>
    <add key="StoreId" value="123" />
</appSettings>

is located in the web.config file of your ASP.NET application and not in some app.config file you've added to your class library project in Visual Studio, right? You can't be possibly getting null if this is the case. If you've added this to an app.config of you class library project in Visual Studio then getting null is perfectly normal behavior.

Upvotes: 8

Related Questions