Q:

Accessing Constants Static Class That References App Settings Config File

I have a class called LocalConstants....
 public static class LocalConstants {
    public static string DM_PATH = ConfigurationManager.AppSettings["DMQueue"];
    public static string PROJECT_PATH = ConfigurationManager.AppSettings["MSQueue"];
 }

When trying to access this class in my main program I am getting a null reference exception. Anything from ConfigurationManager.AppSettings[ is always null. But if I write
  //The value is returned fine 
  string bo=ConfigurationManager.AppSettings["MSQueue"];

this compiles fine but is always null and throws a NullRefexception
   string moomoo = LocalConstants.PROJECT_PATH;

The exception is
The type initializer for 'TestCodeOutOnSide.LocalConstants' threw an exception.
The innerException is the basic
Object reference not set to an instance of an object.
Even if I change the PROJECT_PATH to 
public static readonly string PROJECT_PATH = @"FORMATNAME:DIRECT=OS:serus-nickl\RMQDEV";

I get the same exception
Any ideas?

A:

To begin with, if you are doing this to provide some sort of performance benefit then you should know that these are cached. See ConfigurationManager.AppSettings Caching, to remove any.
Second the issue is most likely that Static field initialization does not work how you expect it to. So your code as written provides no guarantee of that  ConfigurationManager.AppSettings has been run.  From the linked article sample code:

might produce either the output:

Init A
Init B
1 1

or the output:

Init B
Init A
1 1

[EDIT per OP comment]
There must be something else involved as:
public static class LocalConstants
{
    public static string DM_PATH = "DMQueue";
    public static string PROJECT_PATH = "MSQueue";
}

class Program
{
    static void Main(string[] args)
    {
        string moomoo = LocalConstants.PROJECT_PATH;

        Console.WriteLine(moomoo);
    }
}

works for me.
[Edit 2 - Fro those who come after]
It looks like The type initializer for ‘SomeClass’ threw an exception can be a case where

But when it's called by the WPF designer, the "application" is Visual Studio, which (presumably) doesn't have the appropriate connection strings in its .config file;

The fix for that author was:

moving the instantiation of my Entity Data Model into a property

A:

I called this
public static string Environment = AppEnvironmentVariable.ToUpper() != "PROD" ? "***FROM " + AppEnvironmentVariable.ToUpper() + "** " : "";

Before this 
public static string AppEnvironmentVariable = "DEV";

In the LocalConstants file which broke it because of what Josh said about  Static field initialization 

