さて、しばらく前に、他のプログラムの他の構成ファイルを読み取る方法を投稿しました (ここにリンクがあります。前の投稿. なんとかそれを行うことができました. しかし、別の問題があります. シナリオは次のようなものです, 私は2つのプログラムを持っています. プログラムAは構成ファイルからその構成を読み取り、プログラムBはAが読み取った構成ファイルの内容を変更するためにのみ使用されます. 構成ファイルの名前はemail.config です. プログラムAとBが存在する同じディレクトリにあります. .
問題は、ファイルを開くダイアログを使用して添付ファイルのパスを取得することです。パスが同じディレクトリ内のファイルを指している場合、プログラムは完璧に動作します! ただし、ディレクトリ外のファイルを指している場合は、System.NullReferenceException型の例外がスローされます。
ここにコードがあります
private void saveBtn_Click(object sender, EventArgs e)
{
try
{
// save everything and close
string attachment = attachTxtBox.Text;
var configMap = new ExeConfigurationFileMap { ExeConfigFilename = configFileName };
// it throws exception here when
// the path points to a file outside the exes directory
Configuration externalConfig = ConfigurationManager.OpenMappedExeConfiguration(configMap, ConfigurationUserLevel.None);
externalConfig.AppSettings.Settings["ServerAddress"].Value = serverAddr;
externalConfig.AppSettings.Settings["Port"].Value = port;
externalConfig.AppSettings.Settings["SSL"].Value = ssl.ToString();
externalConfig.AppSettings.Settings["Sender"].Value = senderAddr;
externalConfig.AppSettings.Settings["SenderPassword"].Value = password;
externalConfig.AppSettings.Settings["Subject"].Value = subject;
externalConfig.AppSettings.Settings["AttachmentPath"].Value = attachment;
externalConfig.AppSettings.Settings["Body"].Value = messageBody;
// Save values in config
externalConfig.Save(ConfigurationSaveMode.Full);
Application.Exit();
}
catch (System.Exception ex)
{
MessageBox.Show("Error: " + ex.Message);
Application.Exit();
}
}
email.configの内容は次のとおりです。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings file="">
<clear />
<add key="ServerAddress" value="" />
<add key="Port" value="" />
<add key="Sender" value="" />
<add key="SenderPassword" value="" />
<add key="Subject" value="" />
<add key="AttachmentPath" value="" />
<add key="Body" value="" />
</appSettings>
</configuration>
ここで何が間違っていますか?
編集: configFileNameの値は「email.config」です