C# konfiguratsiya fayllari

Xo'sh, bir muncha vaqt oldin men boshqa dasturlarning boshqa konfiguratsiya fayllarini qanday o'qishni yozdim (bu erda havola Oldingi xabar. Men buni uddaladim. Ammo endi boshqa muammo bor. Ssenariy shunday, menda ikkita dastur bor. A dasturi konfiguratsiya faylidan va dasturdan o'z konfiguratsiyasini o'qiydi < strong>B faqat A oʻqiydigan konfiguratsiya fayli mazmunini oʻzgartirish uchun ishlatiladi. Konfiguratsiya faylining nomi email.config. A va B dasturlari joylashgan bir xil katalog.

Muammo shundaki, men ochiq fayl dialogidan foydalanib, biriktirish uchun fayl yo'lini olaman. Agar yo'l bir xil katalogdagi faylga ishora qilsa, dastur mukammal ishlaydi! Ammo agar u katalogdan tashqaridagi faylga ishora qilsa, u System.NullReferenceException turidagi istisnoni keltirib chiqaradi.

Mana kod

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 tarkibi:

<?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>

Bu erda men nima noto'g'ri ish qilyapman?

EDIT: configFileName qiymati "email.config"


person akif    schedule 02.06.2009    source manba


Javoblar (5)


Xo'sh, men deyarli 5 soat davomida disk raskadrovkadan so'ng buni o'zim tushundim, jin ursin!

Muammo shundaki, men fayl yo'lini olish uchun OpenFileDialog-dan foydalanganimda, u joriy katalogni dialog oynasida tanlanganga o'zgartirdi, shuning uchun dastur konfiguratsiya faylini topa olmadi. Men qilgan yagona narsa OpenFileDialog-ning RestoreDirectory xususiyatini rost deb belgilash edi va poof ishladi.

Hammaga rahmat, ChrisF, Eoin Kempbell va pablito.

person akif    schedule 02.06.2009
comment
Siz buni tushundingiz ;-) kechirasiz, qarshilik qila olmadim :) - person fretje; 02.06.2009

Siz faylga to'liq yo'li yoki faqat fayl nomi bilan kira olasizmi?

Agar ikkinchisi bo'lsa, bu fayl bajariladigan fayl bilan bir papkada bo'lganda ishlaydi, lekin boshqacha emas.

YANGILASH

Go'yo narsalar men o'ylaganimdan ham murakkabroq va bu erda muammo emasga o'xshaydi - sharhlarga qarang. Istisnoni ko'taradigan qator:

externalConfig.AppSettings.Settings["ServerAddress"].Value = serverAddr;

Demak, zanjir bo'ylab biror joyda null mos yozuvlar mavjud. Agar bu nima ekanligini aniqlay olsangiz, bu sizga muammoga ko'rsatma berishi kerak.

person ChrisF    schedule 02.06.2009
comment
Men konfiguratsiya fayliga faqat fayl nomi bilan kirayapman, chunki u bir xil katalogda. - person akif; 02.06.2009
comment
Xo'sh, agar u boshqa papkada bo'lsa, unga to'liq yo'l orqali kirishingiz kerak bo'ladi. - person ChrisF; 02.06.2009
comment
Men faylga kirmayapman, faqat uning yo'lini konfiguratsiya faylidagi kalitda saqlayman. Iltimos, mening kodimni o'qing va men istisno sodir bo'lgan joyni sharhladim. - person akif; 02.06.2009
comment
configMap qiymatini ko'rmasdan, men boshqa hech narsa haqida o'ylay olmayman. - person ChrisF; 02.06.2009
comment
configFileName qiymati email.config - person akif; 02.06.2009
comment
Bu mening fikrim. Agar u boshqa jildda bo'lsa, u quyidagi qatorda bo'lishi kerak: C:\Folder1\Folder2\email.config - person ChrisF; 02.06.2009
comment
Faqat fayl nomi bilan kod joriy papkada (ya'ni exe ishlayotgan papkada) ko'rinadi va uni topa olmaydi. Shuning uchun istisno. - person ChrisF; 02.06.2009
comment
Lekin konfiguratsiya fayli bir xil katalogda. Boshqa OpenFileDialog-dan olgan fayl konfiguratsiya faylini ochish uchun ishlatilmaydi. Men uni faqat konfiguratsiya faylida saqlayman. - person akif; 02.06.2009
comment
Men hozir sarosimaga tushdim, garchi menimcha, bu yerda biz turli xil narsalar haqida gapiryapmiz. OK - konfiguratsiya faylida saqlangan qiymat nima? - person ChrisF; 02.06.2009
comment
Kechirasiz, ha, bu chalkashligini bilaman. OpenFileDialog-dan olgan fayl yo'li konfiguratsiya faylida saqlanishi kerak. - person akif; 02.06.2009
comment
Kodingizga qarab, qaysi qatorda istisnolar paydo bo'lishiga ishonchim komil emas. Bu configMap yaratilishimi yoki u qachon ishlatilgan? - person ChrisF; 02.06.2009
comment
Va u saqlanadigan to'liq yo'lmi? - person ChrisF; 02.06.2009
comment
Qaysi qator istisnoni ko'tarayotganini aniqlay olasizmi? - person ChrisF; 02.06.2009
comment
Bu tashqiConfig.AppSettings.Settings[ServerAddress].Value = serverAddr; - person akif; 02.06.2009

OpenFileDialog-dan FileName va Path-ni qaytarish uchun qanday koddan foydalanasiz.

Bu faylga to'liq malakali yo'lmi?

e.g.

openFileDialog1.FileName; //Contains "C:\\Path\\To\\The\\File.txt"

Unga ko'ra, saqlangan narsa faqat fayl nomi, shuning uchun sizning ilovangiz faqat joriy yo'lda ko'rinadi.

person Eoin Campbell    schedule 02.06.2009
comment
Xo'sh, siz meni noto'g'ri talqin qildingiz deb o'ylayman. Men aytmoqchimanki, konfiguratsiya fayli bir xil katalogda va men unga kira olaman. Muammo OpenFileDialog-dan olgan fayl yo'li exe katalogidan tashqarida bo'lganda yuzaga keladi. Lekin, lekin dialog oynasidan olgan fayl yo'li to'liq yo'l va men bu fayl yo'lidan foydalanmayman. Men qiladigan yagona narsa uni kalitda saqlashdir. Lekin men buni qila olmayman - person akif; 02.06.2009

Menda ham xuddi shunday muammo bor edi, bu sizga yordam beradimi, bilmayman, lekin sizning holatingizdagi kabi boshqa papkada joylashgan konfiguratsiya faylining nomini .config ga o'zgartirganimda va u endi ishlamay qoldi. ismni o'zgartirishim mumkin edi, shuning uchun uni boshqa nom bilan qanday ishlashini tekshirishni davom ettirmadim, lekin, albatta, bilishni xohlayman.

person Pablo Retyk    schedule 02.06.2009

externalConfig.AppSettings.Settings["SSL"].Value = ssl.ToString();

Konfiguratsiya faylida "SSL" mavjud emas

Ushbu kodni sinab ko'rayotganlar uchun faqat mening 2c.

person Andrew Rokicki    schedule 29.10.2010