我使用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?
答案 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");
}