วิธีที่ง่ายที่สุดในการมีไฟล์กำหนดค่าในแอปพลิเคชัน Windows Forms C #


88

ฉันยังใหม่กับ. NET มากและฉันก็ยังไม่เข้าใจว่าไฟล์คอนฟิกูเรชันทำงานอย่างไร

ทุกครั้งที่ค้นหาใน Google ฉันได้รับผลลัพธ์เกี่ยวกับ web.config แต่ฉันกำลังเขียนแอปพลิเคชัน Windows Forms

ฉันคิดว่าฉันต้องใช้เนมสเปซ System.Configuration แต่เอกสารไม่ได้ช่วยอะไร

ฉันจะกำหนดได้อย่างไรว่าไฟล์คอนฟิกูเรชันของฉันคือ XYZ.xml หรือมีชื่อ "เริ่มต้น" สำหรับไฟล์กำหนดค่าหรือไม่ ฉันยังไม่เข้าใจ

นอกจากนี้ฉันจะกำหนดส่วนใหม่ได้อย่างไร ฉันจำเป็นต้องสร้างคลาสที่สืบทอดมาจาก ConfigurationSection หรือไม่?

ฉันต้องการเพียงแค่มีไฟล์การกำหนดค่าที่มีค่าดังนี้:

<MyCustomValue>1</MyCustomValue>
<MyCustomPath>C:\Some\Path\Here</MyCustomPath>

มีวิธีทำง่ายๆไหม? คุณช่วยอธิบายด้วยวิธีง่ายๆในการอ่านและเขียนจาก / ไปยังไฟล์คอนฟิกูเรชันง่ายๆ


1
NET เวอร์ชันของคุณคืออะไร สำหรับ 2.0 ขึ้นไปมีวิธีที่น่ารักมากที่เรียกว่าการตั้งค่า
Thomas

1
@ เซเว่นมันพิมพ์ผิด แต่อาจหมายถึง "อธิบายด้วยตัวอย่าง" :)
ฟาบิโอโกเมส

คำตอบ:


123

คุณต้องการใช้ App.Config

เมื่อคุณเพิ่มรายการใหม่ในโครงการจะมีสิ่งที่เรียกว่าไฟล์ Applications Configuration เพิ่มสิ่งนั้น

จากนั้นคุณเพิ่มคีย์ในส่วนการกำหนดค่า / appsettings

ชอบ:

<configuration>
 <appSettings>
  <add key="MyKey" value="false"/>

เข้าถึงสมาชิกโดยทำ

System.Configuration.ConfigurationSettings.AppSettings["MyKey"];

ใช้งานได้ใน. NET 2 ขึ้นไป


2
จริงๆแล้วมันใช้งานได้กับ. NET ทุกเวอร์ชันตั้งแต่ v1.0 เป็นต้นไป คลาสใหม่ใน. NET 2.0 คือ ConfigurationManager
Mike Dimmick

4
โดยส่วนตัวแล้วฉันใช้แท็บ "การตั้งค่า" ใน "คุณสมบัติของแอปพลิเคชัน" (Framework 2.0 เป็นต้นไปเท่านั้น) เนื่องจาก Visual Studio จะพิมพ์รหัสอย่างมากสำหรับการตั้งค่า นอกจากนี้ยังสามารถรวมการตั้งค่า "ผู้ใช้" ซึ่งอ่าน / เขียนในขณะทำงาน
Adrian Clark

@ ไมค์ใช่ฉันรู้สึกว่าเป็นเช่นนั้น แต่ฉันก็ไม่แน่ใจเหมือนกัน ฉันไม่ค่อยได้ทำงานกับ 1
qui

26
หมายเหตุเป็นล้าสมัยใช้ConfigurationSettings System.Configuration.ConfigurationManager.AppSettings["MyKey"];
JNF

16
นอกจากนี้หมายเหตุในการใช้System.Configuration.ConfigurationManagerโครงการของคุณจำเป็นต้องมีการอ้างอิงถึงSystem.Configuration.dll
dmeglio

66

ชี้แจงคำตอบก่อนหน้า ...

  1. เพิ่มไฟล์ใหม่ในโครงการของคุณ ( เพิ่มรายการใหม่ไฟล์กำหนดค่าแอปพลิเคชัน )

  2. แฟ้มการกำหนดค่าใหม่จะปรากฏในโซลูชัน Explorer เป็นApp.Config

  3. เพิ่มการตั้งค่าของคุณลงในไฟล์นี้โดยใช้สิ่งต่อไปนี้เป็นเทมเพลต

    <configuration>
      <appSettings>
        <add key="setting1" value="key"/>
      </appSettings>
      <connectionStrings>
        <add name="prod" connectionString="YourConnectionString"/>
      </connectionStrings>
    </configuration>
    
  4. ดึงข้อมูลออกมาดังนี้:

    private void Form1_Load(object sender, EventArgs e)
    {
        string setting = ConfigurationManager.AppSettings["setting1"];
        string conn = ConfigurationManager.ConnectionStrings["prod"].ConnectionString;
    }
    
  5. เมื่อสร้างโฟลเดอร์ผลลัพธ์ของคุณจะมีไฟล์ชื่อ <assemblyname> .exe.config นี่จะเป็นสำเนาของไฟล์App.Config ผู้พัฒนาไม่จำเป็นต้องดำเนินการใด ๆ เพิ่มเติมเพื่อสร้างไฟล์นี้


1
สิ่งนี้มีประโยชน์กับฉัน อีกสองประเด็น: เมื่อเพิ่มไฟล์ใหม่ในโปรเจ็กต์จะพบไฟล์คอนฟิกูเรชันแอปพลิเคชันเมื่อฉันคลิกที่โหนดทั่วไปทางด้านซ้ายของกล่องโต้ตอบ ในการใช้คลาส ConfigurationManager ในโค้ดของฉันฉันต้องเพิ่ม System.Configuration DLL ในการอ้างอิงของฉัน
John Gilmer

28

จากการอ่านคำตอบก่อนหน้านี้อย่างรวดเร็วพวกเขาดูถูกต้อง แต่ดูเหมือนไม่มีใครพูดถึงสิ่งอำนวยความสะดวกการกำหนดค่าใหม่ใน Visual Studio 2008 แต่ยังคงใช้app.config (คัดลอกในเวลาคอมไพล์ไปยัง YourAppName.exe.config) แต่มีวิดเจ็ต UI สำหรับตั้งค่าคุณสมบัติและระบุประเภท ดับเบิลคลิกที่Settings.settingsในโฟลเดอร์ "Properties" ของโปรเจ็กต์ของคุณ

ส่วนที่ดีที่สุดคือการเข้าถึงคุณสมบัตินี้จากโค้ดคือ typesafe - คอมไพเลอร์จะตรวจจับข้อผิดพลาดที่ชัดเจนเช่นการพิมพ์ชื่อคุณสมบัติผิด ตัวอย่างเช่นคุณสมบัติที่เรียกว่า MyConnectionString ในapp.configจะถูกเข้าถึงเช่น:

string s = Properties.Settings.Default.MyConnectionString;

สิ่งนี้มีอยู่ใน VS2005
Greg D

5
ดี แต่มัน (คุณสมบัติโครงการ | การตั้งค่า) สร้างโค้ดที่ต้องคอมไพล์ หากคุณต้องการเปลี่ยนการตั้งค่าคุณต้องปล่อยไบนารีใหม่ให้กับลูกค้า
JohnL4

@ JohnL4 หากการตั้งค่าเหล่านี้อยู่ในขอบเขต "ผู้ใช้" คุณสามารถเปลี่ยนได้โดยใช้โปรแกรมเช่นSettings.Default.Test = "abc"; Settings.Default.Save();
Peet Brits

10

คุณควรสร้างไฟล์App.config (คล้ายกับweb.configมาก)

คุณควรคลิกขวาที่โปรเจ็กต์ของคุณเพิ่มรายการใหม่และเลือก"ไฟล์กำหนดค่าแอปพลิเคชัน"ใหม่

ตรวจสอบให้แน่ใจว่าคุณเพิ่มโดยใช้ System.Configuration ในโครงการของคุณ

จากนั้นคุณสามารถเพิ่มค่าได้:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="setting1" value="key"/>
  </appSettings>
  <connectionStrings>
    <add name="prod" connectionString="YourConnectionString"/>
  </connectionStrings>
</configuration>

    private void Form1_Load(object sender, EventArgs e)
    {
        string setting = ConfigurationManager.AppSettings["setting1"];
        string conn = ConfigurationManager.ConnectionStrings["prod"].ConnectionString;
    }

หมายเหตุ: ตาม Microsoftคุณควรใช้ ConfigurationManager แทน ConfigurationSettings (ดูส่วนข้อสังเกต):

"คลาส ConfigurationSettings ให้ความเข้ากันได้ย้อนหลังเท่านั้นสำหรับแอ็พพลิเคชันใหม่คุณควรใช้คลาส ConfigurationManager หรือคลาส WebConfigurationManager แทน"


เป็นประโยชน์มาก แก้ไขปัญหาของฉันไปที่ T.
JCMorris

ใน Visual Studio 2015: คลิกที่โครงการ> เพิ่มการอ้างอิง เลื่อนลงมาครึ่งทางเพื่อค้นหา System.Configuration คลิก OK จากนั้นอัปเดตบรรทัดของโค้ดตามความคิดเห็นของ Nathan
Robot70

7

ชื่อเริ่มต้นสำหรับไฟล์การกำหนดค่าคือ [yourexe] .exe.config ดังนั้น notepad.exe จะมีไฟล์กำหนดค่าชื่อ notepad.exe.config อยู่ในโฟลเดอร์เดียวกับโปรแกรม นี่เป็นไฟล์คอนฟิกูเรชันทั่วไปสำหรับทุกด้านของ CLR และ Framework แต่สามารถมีการตั้งค่าของคุณเองภายใต้<appSettings>โหนด

องค์ประกอบสร้างคอลเลกชันของคู่ค่าชื่อซึ่งสามารถเข้าถึงได้เป็น<appSettings> System.Configuration.ConfigurationSettings.AppSettingsอย่างไรก็ตามไม่มีวิธีบันทึกการเปลี่ยนแปลงกลับไปยังไฟล์กำหนดค่า

นอกจากนี้ยังเป็นไปได้ที่จะเพิ่มองค์ประกอบที่กำหนดเองของคุณเองลงในไฟล์คอนฟิกูเรชันตัวอย่างเช่นเพื่อกำหนดการตั้งค่าที่มีโครงสร้างโดยการสร้างคลาสที่ใช้งานIConfigurationSectionHandlerและเพิ่มลงใน<configSections>องค์ประกอบของไฟล์คอนฟิกูเรชัน ConfigurationSettings.GetConfigจากนั้นคุณสามารถเข้าถึงได้โดยการเรียก

.NET 2.0 เพิ่มคลาสใหม่System.Configuration.ConfigurationManagerซึ่งรองรับไฟล์หลายไฟล์โดยมีการลบล้างข้อมูลต่อระบบต่อผู้ใช้ นอกจากนี้ยังรองรับการบันทึกการกำหนดค่าที่แก้ไขกลับไปที่ไฟล์การตั้งค่า

Visual Studio สร้างไฟล์ที่เรียกว่าApp.configซึ่งจะคัดลอกไปยังโฟลเดอร์ EXE ด้วยชื่อที่ถูกต้องเมื่อสร้างโครงการ


6

ที่ดีที่สุด (IMHO) บทความเกี่ยวกับการกำหนดค่า .NET แอพลิเคชันบน CodeProject, ไขความลึกลับของ NET 2.0 การกำหนดค่า และชื่นชอบต่อไปของฉัน (สั้น) บทความเกี่ยวกับส่วนในแฟ้มการกำหนดค่า .NET คือการทำความเข้าใจมาตรา Handlers - ไฟล์


ไม่ใช่วิธีที่ง่ายที่สุดที่ผู้ใช้ถาม แต่การไขความลึกลับของการกำหนดค่า. NET 2.0 เป็นบทความที่ยอดเยี่ยมจริงๆ
Ricardo Amores

3

ใน Windows Forms คุณมีapp.configไฟล์ซึ่งคล้ายกับweb.configไฟล์มาก แต่เนื่องจากสิ่งที่ฉันเห็นคุณต้องการสำหรับเป็นค่าที่กำหนดเองผมขอแนะนำให้ใช้การตั้งค่า

ในการดำเนินการดังกล่าวให้เปิดคุณสมบัติโครงการของคุณจากนั้นไปที่การตั้งค่า หากไม่มีไฟล์การตั้งค่าคุณจะมีลิงค์สำหรับสร้างไฟล์ จากนั้นคุณสามารถเพิ่มการตั้งค่าลงในตารางที่คุณเห็นซึ่งจะสร้างทั้ง XML ที่เหมาะสมและคลาสการตั้งค่าที่สามารถใช้โหลดและบันทึกการตั้งค่าได้

DefaultNamespace.Properties.Settingsชั้นการตั้งค่าจะถูกตั้งชื่อสิ่งที่ต้องการ จากนั้นคุณสามารถใช้รหัสที่คล้ายกับ:

using DefaultNamespace.Properties;

namespace DefaultNamespace {
    class Class {
        public int LoadMySettingValue() {
            return Settings.Default.MySettingValue;
        }
        public void SaveMySettingValue(int value) {
            Settings.Default.MySettingValue = value;
        }
    }
}

2

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


2

วิธีที่ง่ายที่สุดในการทำเช่นนี้คือการใช้ของคุณกำหนดเองของคุณเองSettingsในชั้นเรียน


+1 สำหรับลิงก์ verbose น้อยไปยัง ApplicationSettings ที่msdn.microsoft.com/en-us/library/…ซึ่งดูเหมือนง่ายกว่าการใช้งาน ConfigurationManager รับ / ตั้งค่าไม่สนใจ "XML Shaping"
maxwellb

1

ใช้:

System.Configuration.ConfigurationSettings.AppSettings["MyKey"];

AppSettings เลิกใช้งานแล้วและตอนนี้ถือว่าล้าสมัยแล้ว ( ลิงก์ )

นอกจากนี้ส่วน appSettings ของapp.configถูกแทนที่ด้วยส่วนapplicationSettings

ตามที่มีคนกล่าวถึงคุณควรใช้ System.Configuration.ConfigurationManager ( ลิงค์ ) ซึ่งเป็นของใหม่สำหรับ. NET 2.0


ConfigurationSettings เลิกใช้แล้วไม่ใช่ AppSettings
Toby

0

คุณใช้. NET และ Visual Studio เวอร์ชันใดอยู่

เมื่อคุณสร้างโครงการใหม่คุณควรจะมีไฟล์ในการแก้ปัญหาของคุณเรียกว่าapp.config นั่นคือไฟล์กำหนดค่าเริ่มต้น

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