尝试在app.config中编写时出现NullReferenceException

时间:2013-12-12 19:17:28

标签: c# app-config nullreferenceexception

我使用app.config来存储一些信息。我的文件看起来像这样:

<?xml version="1.0"?>
<configuration>
<appSettings>
<add key="używajDomyślnie" value="false" />
<add key="sInicjały" value="ŁM" />
<add key="nPrzedstawiciel" value="Łukasz Motyczka" />
<add key="nPozycja" value="Przedstawiciel Naukowo-Handlowy" />
<add key="nTelefon" value="+48 784 567 670" />
<add key="nEmail" value="motyczka.lukasz@bmgrp.pl" />
<add key="dataoferty" value="" />
<add key="ostatniNrOferty" value="" />

 </appSettings>
 <connectionStrings>
 <add name="Oferty_BMGRP.Properties.Settings.BazaDanychConnectionString" connectionString="Data Source=|DataDirectory|\BazaDanych.sdf" providerName="Microsoft.SqlServerCe.Client.3.5" />
  </connectionStrings>
  <system.windows.forms jitDebugging = "true"/>
</configuration>

抛出NullexceptionError的代码段是:

if(checkBox1.CheckState == CheckState.Checked)
    {

      Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
      AppSettingsSection app = config.AppSettings;

      //app.Settings.Clear();
      //app.Settings.Add("używajDomyślnie", "true");
      //app.Settings.Add("sInicjały", sInicjaly.ToString());
      //app.Settings.Add("nPrzedstawiciel", nPrzedstawiciel.ToString());
      //app.Settings.Add("nPozycja", nPozycja.ToString());
      //app.Settings.Add("nTelefon", nTelefon.ToString());
      //app.Settings.Add("nEmail", nEmail.ToString());

      config.AppSettings.Settings["używajDomyślnie"].Value = "true"; //<- THIS LINE GIVES ME AN ERROR
      config.AppSettings.Settings["sInicjały"].Value = sInicjaly.ToString();
      config.AppSettings.Settings["nPrzedstawiciel"].Value = nPrzedstawiciel.ToString();
      config.AppSettings.Settings["nPozycja"].Value = nPozycja.ToString();
      config.AppSettings.Settings["nTelefon"].Value = nTelefon.ToString();
      config.AppSettings.Settings["nEmail"].Value = nEmail.ToString();

      config.Save(ConfigurationSaveMode.Modified);

      form1.checkBox1.CheckState = CheckState.Checked;

    }    

当我调试它或在VS中构建版本时它工作正常。它也适用于我的笔记本电脑。但在其他每台机器上我都有null异常错误。它也一直工作,直到我试图建立一个安装项目(它可以工作,但只是改变了这个项目)。还有jit Debugging不起作用,我仍然有.net错误(继续或退出)。

另外我注意到在我的电脑和我正在使用的其他笔记本电脑上,当出现错误时显示:

System.NullReferenceException: Odwołanie do obiektu nie zostało ustawione na wystąpienie obiektu.
   w Oferty_BMGRP.Form3.button1_Click(Object sender, EventArgs e) w C:\Users\user\Documents\Visual Studio 2010\Projects\BMGRP\Oferty BMGRP\OfertyBMGRP\Form3.cs:wiersz 282

很抱歉打磨,但我想指出的是,在两台机器上它都会显示同一文件夹的路径,该文件夹只存在于其中一个文件夹中。

请帮助:)

EDIT!

我刚刚发现如果我构建了这个版本。运行应用程序并使上面的代码运行,它创建MyApplication.exe.config文件,然后应用程序在每台计算机上正常工作。如何使其作为安装项目工作,其中未创建.exe.config,只有app.config?

2 个答案:

答案 0 :(得分:2)

MyApplication.exe.config app.config,你不应该混淆那种范式。这就是.net应用程序的工作方式。

如果您希望以不同的方式进行配置,则可以执行自己的文件IO或查找其他外部配置库。

答案 1 :(得分:2)

您正在尝试设置null对象的Value属性。在你甚至有机会设置值之前,Settings["blah"]返回null。

请改为尝试:

config.AppSettings.Add("key", "value");

或者可能会进行空检查:

if(config.AppSettings.Settings["key"] == null)
{
   config.AppSettings.Add("key", "value");
}