อ่านจากไฟล์ app.config


131

ฉันพยายามอ่าน BeginMonthColumn และ CategoryHeadingColumn จากไฟล์ app.config ด้านล่างโดยใช้รหัส

ConfigurationSettings.AppSettings["StartingMonthColumn"]

แต่กำลังส่งคืนค่า null และ ConfigurationSettings.AppSettings.Count ส่งคืนค่าศูนย์

โปรดช่วยฉันอ่านสิ่งนี้ในแอปพลิเคชัน windows ของฉัน

<configuration>
    <configSections>
        <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
            <section name="CTARepository.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
        </sectionGroup>
    </configSections>
    <userSettings>
        <CTARepository.Properties.Settings>
            <setting name="Setting" serializeAs="String">
                <value />
            </setting>
        </CTARepository.Properties.Settings>
    </userSettings>
    <appSettings>
        <add key="StartingMonthColumn" value="7"/>
        <add key="CategoryHeadingColumn" value="1"/>
    </appSettings>
</configuration>

คุณกำลังพยายามเรียกใช้แอปจากโฟลเดอร์ \ bin \ debug ในขณะที่เปลี่ยนไฟล์กำหนดค่าที่รากของโครงการหรือไม่ มิฉะนั้นให้เปลี่ยนการกำหนดค่าและสร้างโค้ดใหม่หลังจากรันการล้างข้อมูล
Kangkan

1
ไฟล์ไม่ได้ชื่อ "app.config" ใช่ไหม ชื่อนี้อยู่ในโปรเจ็กต์ของคุณอย่างแน่นอน แต่ในไดเร็กทอรีเอาต์พุตของแอปพลิเคชันควรตั้งชื่อเดียวกันกับไบนารีเอาต์พุต + ".config" (เช่น "MyLibrary.dll.config" หรือ "MyProgram.exe.config "ฯลฯ ... )
BrainSlugs83

@ BrianSlugs83 ขอบคุณเพื่อนฉันสงสัยว่าทำไมแอพของฉันถึงล่ม หลังจากสองวันในการค้นหาทุกที่คำตอบอยู่ที่นี่ในความคิดเห็น ฉันมี "app.config" และไม่มี "MyProgram.exe.config"
śmiglidigli

โปรดดูที่stackoverflow.com/questions/1189364/…สำหรับวิธีแก้ปัญหา ขอบคุณ
Ariful Islam

คำตอบ:


171

การกำหนดค่าการตั้งค่า .AppSettingsเป็นล้าสมัยคุณควรใช้การกำหนดค่าผู้จัดการ .AppSettingsแทน (คุณจะต้องเพิ่มการอ้างอิงถึงSystem.Configuration )

int value = Int32.Parse(ConfigurationManager.AppSettings["StartingMonthColumn"]);

หากคุณยังคงมีปัญหาในการอ่านในการตั้งค่าแอพของคุณให้ตรวจสอบว่าapp.configไฟล์ของคุณตั้งชื่อถูกต้อง โดยเฉพาะควรตั้งชื่อตามแอสเซมบลีที่ดำเนินการเช่นMyApp.exe.configและควรอยู่ในไดเร็กทอรีเดียวกับMyApp.exe.


2
ถ้า ConfigurationSettings.AppSettings ["BeginMonthColumn"] ส่งคืนค่า null หรือสตริงว่างฉันสงสัยว่า Int32.Parse จะทำให้เกิดข้อยกเว้นในการพยายามแยกวิเคราะห์ค่านั้น
Bittercoder

@bittercoder ใช่มันจะอย่างไรก็ตามไฟล์ app.config ของคุณควรเสมอมีอยู่แล้วการกำหนดค่าที่ถูกต้อง หาก OP ต้องการเพิ่มรูปแบบการจัดการบางอย่างในนั้นเช่นTryParseก็สามารถทำได้ อย่างไรก็ตามนี่ไม่ใช่คำถาม
เจมส์

2
โปรดทราบว่าคุณยังสามารถเข้าถึงค่าเวอร์ชันที่พิมพ์ได้ชัดเจนได้เช่นกันผ่าน Settings.Default. * (เช่นในกรณีนี้จะเป็น Settings.Default.StartingMonthColumn)
BrainSlugs83

@ BrainSlugs83 โปรดทราบว่าการตั้งค่าผู้ใช้ที่สับสนกับการตั้งค่าแอป หากคุณต้องการเข้าถึงการตั้งค่าแอพที่พิมพ์มากคุณจะต้องใช้ConfigurationSection ที่
James

ไม่ถูกต้องระบบจะดึงค่าจาก app.config ไม่ว่าค่าจะถูกกำหนดขอบเขตเป็น "ผู้ใช้" หรือ "แอปพลิเคชัน" (จากตัวออกแบบ GUI คุณสามารถเลือกขอบเขตสำหรับการตั้งค่าแต่ละรายการได้)
BrainSlugs83

20

สำหรับการอ้างอิงในอนาคตคุณเพียงแค่เพิ่มลงSystem.Configurationในไลบรารีข้อมูลอ้างอิงของคุณ:

ป้อนคำอธิบายภาพที่นี่


2
คำตอบของคุณดีกว่าคำตอบแรกที่นี่ทุกคนลืมบอกว่าคุณต้องเพิ่มข้อมูลอ้างอิง
เรียงความ

19

ConfigurationSettings.AppSettings เลิกใช้งานดูที่นี่:

http://msdn.microsoft.com/en-us/library/system.configuration.configurationsettings.appsettings.aspx

ที่กล่าวว่ามันควรจะยังคงใช้งานได้

เป็นเพียงข้อเสนอแนะ แต่คุณยืนยันหรือไม่ว่าการกำหนดค่าแอปพลิเคชันของคุณเป็นสิ่งที่ปฏิบัติการของคุณใช้อยู่

ลองติดดีบักเกอร์และตรวจสอบค่าต่อไปนี้:

AppDomain.CurrentDomain.SetupInformation.ConfigurationFile

จากนั้นเปิดไฟล์กำหนดค่าและตรวจสอบว่าส่วนนั้นเป็นไปตามที่คุณคาดไว้


สวัสดี Bittercoder เมื่อฉันพยายามรับค่า AppDomain.CurrentDomain.SetupInformation.ConfigurationFile ฉันได้รับ C: \\ Program Files \\ Microsoft Office \\ OFFICE11 \\ exCEL.EXE.config ซึ่งไม่ใช่ไฟล์กำหนดค่าของฉัน ... สิ่งที่ควร ฉันทำ
Sathish

นั่นคือไฟล์กำหนดค่าที่ถูกต้อง ... อาจเป็นไปได้ว่าคุณไม่ได้คาดหวังไว้ ในความเป็นจริงในกรณีนี้ฉันเชื่อว่า C: \ Program Files \ Microsoft Office \ OFFICE11 \ Excel.EXE.config คือการกำหนดค่าส่วนกลางและหากคุณวาง Excel.EXE.config ที่มีชื่อคล้ายกันในไดเร็กทอรีเดียวกับแอสเซมบลีของคุณนี่คือ ตำแหน่งที่จะอ่านการตั้งค่าแอปของคุณ ดูรายละเอียดลิงก์เหล่านี้: dotnet247.com/247reference/msgs/56/281797.aspx stackoverflow.com/questions/2288575/…
Bittercoder


7

นี้:

Console.WriteLine( "StartingMonthColumn is {0}", ConfigurationManager.AppSettings["StartingMonthColumn"]);

ทำงานได้ดีสำหรับฉัน

โปรดทราบว่าConfigurationManagerอยู่ในSystem.Configurationเนมสเปซ (ดังนั้นคุณอาจต้องการusing System.Configuration;คำสั่ง) และเนื่องจากสิ่งที่คุณอ่านมีประเภทสตริงคุณจะต้องแยกวิเคราะห์สิ่งที่คุณอ่านเพื่อใช้เป็นตัวเลข

นอกจากนี้อย่าลืมตั้งค่าsystem.configuration.dllเป็นข้อมูลอ้างอิงในโปรเจ็กต์หรือบิลด์สคริปต์ของคุณ


การอ้างอิงที่ควรเพิ่มเพื่อรับ ConfigurationManager คืออะไร Appsettings ที่ฉันใช้. Net 2.0 Framework
Sathish

1
System.Configuration.dllคุณจำเป็นต้องมีการอ้างอิงถึง ConfigurationManagerชั้นถูกเพิ่มเข้ามาใน NET 2.0 ดังนั้นคุณควรจะตกลง
Michael Burr

7

เหตุผลง่ายๆก็คือการโทรของคุณConfigurationSettings.AppSettingsไม่ส่งคืนไฟล์กำหนดค่าที่จำเป็น โปรดลองทำตามวิธีต่อไปนี้:

  • ตรวจสอบให้แน่ใจว่าการกำหนดค่าแอปของคุณมีชื่อเดียวกับไฟล์ exe ของแอปพลิเคชันของคุณโดยมีนามสกุล. config ต่อท้ายเช่น MyApp.exe.config
  • หรือคุณสามารถใช้ ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly().Location).AppSettings["StartingMonthColumn"]

หวังว่านี่จะช่วยได้


3

พยายามสร้างโครงการของคุณใหม่ - คัดลอกเนื้อหาApp.configไปที่ "<YourProjectName.exe> ​​.config" ในไลบรารีรุ่น


2

ยังเพิ่มคีย์ "BeginMonthColumn" ใน App.config ที่คุณเรียกใช้แอปพลิเคชันตัวอย่างเช่นใน App.config ของโครงการทดสอบ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.