App.config ใน C # .NET คืออะไร วิธีใช้งาน


179

ฉันได้ทำโครงการใน C # .NET โดยที่ไฟล์ฐานข้อมูลของฉันเป็นสมุดงาน Excel เนื่องจากตำแหน่งของสตริงการเชื่อมต่อนั้นมีการเข้ารหัสอย่างหนักในการเข้ารหัสของฉันจึงไม่มีปัญหาในการติดตั้งในระบบของฉัน แต่สำหรับระบบอื่น ๆ ที่มี

มีวิธีให้ผู้ใช้กำหนดเส้นทางหลังจากการติดตั้งแอปพลิเคชันเสร็จสมบูรณ์หรือไม่?

คำตอบที่ฉันได้รับคือ "ใช้ App.Config" ... ทุกคนสามารถบอกได้ว่า App.config นี้คืออะไรและจะใช้งานอย่างไรในบริบทของฉันที่นี่


4
เป็นไปได้ที่ซ้ำกันของapp.config คืออะไร
ผู้ใช้

คำตอบ:


190

ที่ง่ายที่สุด app.config เป็นไฟล์ XML ที่มีส่วนกำหนดค่าที่กำหนดไว้ล่วงหน้าจำนวนมากและการสนับสนุนสำหรับส่วนกำหนดค่าที่กำหนดเอง "ส่วนการกำหนดค่า" เป็นตัวอย่างของ XML ที่มีสคีมาเพื่อเก็บข้อมูลบางประเภท

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

เว็บแอปพลิเคชันมักจะมี web.config ในขณะที่ Windows GUI / แอปพลิเคชันบริการมีไฟล์ app.config

ไฟล์กำหนดค่าระดับแอปพลิเคชันสืบทอดการตั้งค่าจากไฟล์กำหนดค่าส่วนกลางเช่น machine.config

อ่านจาก App.Config

สตริงการเชื่อมต่อมีสคีมาที่กำหนดไว้ล่วงหน้าซึ่งคุณสามารถใช้ได้ โปรดทราบว่าตัวอย่างเล็ก ๆ นี้เป็นไฟล์ app.config (หรือ web.config) ที่ถูกต้อง:

<?xml version="1.0"?>
<configuration>
    <connectionStrings>   
        <add name="MyKey" 
             connectionString="Data Source=localhost;Initial Catalog=ABC;"
             providerName="System.Data.SqlClient"/>
    </connectionStrings>
</configuration>

เมื่อคุณกำหนด app.config แล้วคุณสามารถอ่านได้ในรหัสโดยใช้คลาสConfigurationManager อย่าถูกข่มขู่โดยตัวอย่าง MSDN verbose; มันค่อนข้างง่ายจริงๆ

string connectionString = ConfigurationManager.ConnectionStrings["MyKey"].ConnectionString;

กำลังเขียนไปที่ App.Config

การเปลี่ยนไฟล์ * .config บ่อยครั้งไม่ใช่ความคิดที่ดี แต่ดูเหมือนคุณต้องการทำการตั้งค่าแบบครั้งเดียวเท่านั้น

โปรดดู: เปลี่ยนสตริงการเชื่อมต่อ & โหลดแอปอีกครั้งตอนรันไทม์ซึ่งอธิบายวิธีอัปเดตconnectionStringsส่วนของไฟล์ * .config ที่รันไทม์

โปรดทราบว่าคุณควรทำการเปลี่ยนแปลงการกำหนดค่าดังกล่าวจากตัวติดตั้งอย่างง่าย

ตำแหน่งของ App.Config ที่รันไทม์

ถาม : สมมติว่าฉันเปลี่ยนบางอย่างด้วยตัวเอง<value>ใน app.config บันทึกและปิด ตอนนี้เมื่อฉันไปที่โฟลเดอร์ bin และเปิดไฟล์. exe จากที่นี่ทำไมมันไม่แสดงถึงการเปลี่ยนแปลงที่นำไปใช้?

ตอบ : เมื่อคุณรวบรวมแอปพลิเคชัน app.config ของแอพพลิเคชั่นจะถูกคัดลอกไปยังไดเรกทอรี bin 1พร้อมชื่อที่ตรงกับ exe ของคุณ ตัวอย่างเช่นหาก exe ของคุณชื่อ "test.exe" ควรมี "text.exe.config" ในไดเรกทอรี bin ของคุณ คุณสามารถเปลี่ยนการกำหนดค่าโดยไม่ต้องคอมไพล์ใหม่ แต่คุณจะต้องแก้ไขไฟล์กำหนดค่าที่สร้างขึ้นในเวลารวบรวมไม่ใช่แอพเดิม

1: โปรดทราบว่าไฟล์ web.config จะไม่ถูกย้าย แต่จะอยู่ในตำแหน่งเดียวกันในเวลาคอมไพล์และการปรับใช้ หนึ่งข้อยกเว้นนี้คือเมื่อ web.config จะเปลี่ยน

.NET Core

ตัวเลือกการกำหนดค่าใหม่ถูกนำมาใช้กับ. NET Core วิธีการทำงานของไฟล์ * .config นั้นไม่มีการเปลี่ยนแปลง แต่นักพัฒนามีอิสระที่จะเลือกกระบวนทัศน์การกำหนดค่าใหม่ที่ยืดหยุ่นกว่าได้


ดูเพิ่มเติมที่: codeproject.com/Articles/16466/…สำหรับภาพรวมที่ยอดเยี่ยมเกี่ยวกับวิธีการทำงานของไฟล์
ปรับแต่ง

56

เพียงแค่App.configเป็นXMLรูปแบบไฟล์ที่เก็บแอพลิเคชันระดับการตั้งค่า

ตัวอย่าง:

<?xml version="1.0"?>
<configuration>
  <appSettings>
    <add key="key" value="test" />
  </appSettings>
</configuration>

คุณสามารถเข้าถึงการกำหนดค่าโดยใช้ConfigurationManagerตามที่แสดงในชิ้นส่วนของโค้ดด้านล่าง:

var value = System.Configuration.ConfigurationManager.AppSettings["key"];
// value is now "test"

หมายเหตุ: ConfigurationSettingsเป็นวิธีที่ล้าสมัยเพื่อดึงข้อมูลการกำหนดค่า

var value = System.Configuration.ConfigurationSettings.AppSettings["key"];

21
คุณต้องอ้างอิงSystem.Configuration.dllเพื่อใช้ API ที่กล่าวถึงข้างต้น
KFL

2
สำหรับหนึ่งคุณไม่ควรจัดเก็บสายเชื่อมต่อในส่วน AppSettings พวกเขาไปในส่วน ConnectionStrings สำหรับสองคน Visual Studio จะสร้างคุณสมบัติการพิมพ์ที่แข็งแกร่งสำหรับการตั้งค่าของคุณหากคุณสร้างอย่างถูกต้องผ่านตัวออกแบบคุณไม่ควรพิมพ์ชื่อคีย์ด้วยตนเอง (เช่นคุณอยู่ในรหัสด้านบน)
BrainSlugs83

1
เราไม่ได้พูดถึงแนวปฏิบัติที่ดีที่สุดที่นี่ แต่เป็นการแก้ไขปัญหา OP
Furqan Safdar

2
System.Configuration.ConfigurationManager.AppSettings["Key"]เป็นสตริงอยู่แล้วการเรียกToString()ใช้ซ้ำซ้อน
Bogdan Stăncescu

4

เพียงเพิ่มสิ่งที่ฉันหายไปจากคำตอบทั้งหมด - แม้ว่ามันจะโง่และชัดเจนทันทีที่คุณรู้:

ไฟล์จะต้องมีชื่อว่า "App.config" หรือ "app.config" และสามารถอยู่ในโครงการของคุณในระดับเดียวกันเช่น Program.cs

ฉันไม่ทราบว่าเป็นไปได้ที่ตั้งอื่น ๆ ชื่ออื่น ๆ (เช่น application.conf ตามที่แนะนำในเอกสารประกอบ ODP.net) ไม่ทำงานสำหรับฉัน

PS ฉันเริ่มด้วย Visual Studio Code และสร้างโครงการใหม่ด้วย "dotnet new" ไม่มีการสร้างไฟล์การกำหนดค่าในกรณีนี้ฉันแน่ใจว่ามีกรณีอื่น PPS คุณอาจต้องเพิ่มแพ็คเกจ nuget เพื่อให้สามารถอ่านไฟล์ปรับแต่งได้ในกรณีของ. NET CORE จะเป็น "dotnet add package System.Configuration.ConfigurationManager --version 4.5.0"


นี่คือสิ่งที่ฉันกำลังมองหา จำเป็นต้องรู้ระดับที่จะรวมไว้ที่ บางโปรแกรม / เฟรมเวิร์กดูในโฟลเดอร์เช่น/resources
alex

3

App.Config เป็นไฟล์ XML ที่ใช้เป็นไฟล์กำหนดค่าสำหรับแอปพลิเคชันของคุณ กล่าวอีกนัยหนึ่งคุณเก็บไว้ภายในการตั้งค่าใด ๆ ที่คุณอาจต้องการเปลี่ยนแปลงโดยไม่ต้องเปลี่ยนรหัส (และคอมไพล์ใหม่) มันมักจะใช้ในการจัดเก็บสายเชื่อมต่อ

ดูบทความ MSDN นี้เกี่ยวกับวิธีการทำ



0

เพียงเพิ่มอีกหนึ่งจุด

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

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