เมื่อใช้ไฟล์ Settings.settings ใน. NET จริงๆแล้ว config ถูกเก็บไว้ที่ไหน?


100

เมื่อใช้ไฟล์ Settings.settings ใน. NET จริงๆแล้ว config ถูกเก็บไว้ที่ไหน? ฉันต้องการลบการตั้งค่าที่บันทึกไว้เพื่อกลับไปสู่สถานะเริ่มต้น แต่ไม่พบว่าเก็บไว้ที่ใด ... มีแนวคิดอย่างไร

คำตอบ:


100

ขึ้นอยู่กับว่าการตั้งค่าที่คุณเลือกอยู่ในขอบเขต "ผู้ใช้" หรือขอบเขต "แอปพลิเคชัน"

ขอบเขตผู้ใช้

การตั้งค่าขอบเขตผู้ใช้จะถูกเก็บไว้ใน

C: \ Documents and Settings \ ชื่อผู้ใช้ \ Local Settings \ Application Data \ ApplicationName

คุณสามารถอ่าน / เขียนได้ที่รันไทม์

สำหรับ Vista และ Windows 7 โฟลเดอร์คือ

C: \ Users \ ชื่อผู้ใช้ \ AppData \ Local \ ApplicationName

หรือ

C: \ Users \ ชื่อผู้ใช้ \ AppData \ Roaming \ ApplicationName

ขอบเขตการใช้งาน

การตั้งค่าขอบเขตแอ็พพลิเคชันจะถูกบันทึกไว้AppName.exe.configและเป็นแบบอ่านอย่างเดียวที่รันไทม์


20
โฟลเดอร์สำหรับการตั้งค่าขอบเขตผู้ใช้บน Vista และ Win7 คือ C: \ Users \ username \ AppData \ Local \ ApplicationName \ Publisher \ ApplicationName \ Version หรือ C: \ Users \ username \ AppData \ Roaming \ ApplicationName \ Publisher \ ApplicationName \ Version ขึ้นอยู่กับ ค่าคุณสมบัติโรมมิ่งในบานหน้าต่างการตั้งค่า
jakdep

4
เว้นแต่จะเป็น addin ซึ่งในกรณีนี้จะเป็น AppName.dll.config
ประเภทนิรนาม

4
user.config ในเครื่องของฉันบน Windows 7 อยู่ใน C: \ Users \ <username> \ AppData \ Local \ Publisher \ ApplicationName_Eid_EvidenceHash \ Version
The Lonely Coder

53

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

public static string GetDefaultExeConfigPath(ConfigurationUserLevel userLevel)
{
  try
  {
    var UserConfig = ConfigurationManager.OpenExeConfiguration(userLevel);
    return UserConfig.FilePath;
  }
  catch (ConfigurationException e)
  {
    return e.Filename;
  }
}

ApplicationSettings (เช่น settings.settings) ใช้ PerUserRoamingAndLocal สำหรับการตั้งค่าผู้ใช้โดยค่าเริ่มต้น (ตามที่ฉันจำได้)

อัปเดต:แปลก แต่มีคำตอบที่ไม่ถูกต้องมากเกินไปที่นี่ หากคุณกำลังมองหาไฟล์การตั้งค่าขอบเขตผู้ใช้ของคุณ (user.config) ไฟล์นั้นจะอยู่ในโฟลเดอร์ต่อไปนี้ (สำหรับ Windows XP):

C: \ Documents and Settings \ (ชื่อผู้ใช้) \ Local Settings \ Application Data \ (company-name-if-มีอยู่) \ (app-name) .exe_ (Url | StrongName) _ (hash) \ (app-version) \

URL หรือ StrongName ขึ้นอยู่กับว่าคุณมีชื่อที่รัดกุมของแอสเซมบลีแอสเซมบลีหรือไม่


ความคิดใดที่ก่อให้เกิดแฮชในเส้นทางนั้น? แอพของฉันแต่ละรุ่นที่ตามมาจะได้รับค่าแฮชที่แตกต่างกันซึ่งทำให้การเรียก ApplicationSettingsBase.Upgrade () ไร้ประโยชน์ : /
Mal Ross

2
แฮชคือแฮช SHA1 ของ StrongName เมื่อลงชื่อแอปหรือพา ธ เมื่อแอปไม่ได้ลงนาม เพิ่มเติมที่นี่msdn.microsoft.com/en-us/library/ms379611(v=vs.80).aspx
arbiter

20

สมมติว่าคุณกำลังพูดถึงเดสก์ท็อปไม่ใช่เว็บแอปพลิเคชัน:

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

ในเวลาคอมไพล์ VS จะ (โดยค่าเริ่มต้นคุณสามารถเปลี่ยนสิ่งนี้ได้) คัดลอกapp.configไปยังไดเร็กทอรี build โดยเปลี่ยนชื่อให้ตรงกับไฟล์ปฏิบัติการ (เช่นหากไฟล์ปฏิบัติการของคุณตั้งชื่อfoo.exeไฟล์จะถูกตั้งชื่อfoo.exe.config) ซึ่งเป็นชื่อไฟล์. NET configuration manager มองหาเมื่อดึงการตั้งค่าที่รันไทม์

หากคุณเปลี่ยนการตั้งค่าผ่าน VS การตั้งค่าแก้ไขก็จะอัปเดตทั้งสองและapp.config Settings.cs(หากคุณดูตัวเข้าถึงคุณสมบัติในโค้ดที่สร้างขึ้นSettings.csคุณจะเห็นว่ามีการทำเครื่องหมายด้วยแอตทริบิวต์ที่มีค่าเริ่มต้นของการตั้งค่าที่อยู่ในapp.configไฟล์ของคุณ) หากคุณเปลี่ยนการตั้งค่าโดยแก้ไขapp.configไฟล์โดยตรงSettings.csจะไม่ได้รับการอัปเดต แต่ค่าใหม่จะยังคงถูกใช้โดยโปรแกรมของคุณเมื่อคุณเรียกใช้เนื่องจากapp.configจะถูกคัดลอกไปfoo.exe.configในเวลาคอมไพล์ หากคุณปิดสิ่งนี้ (โดยการตั้งค่าคุณสมบัติของไฟล์) คุณสามารถเปลี่ยนการตั้งค่าโดยแก้ไขfoo.exe.configไฟล์โดยตรงในไดเร็กทอรีบิลด์

จากนั้นมีการตั้งค่าขอบเขตผู้ใช้

การตั้งค่าขอบเขตแอปพลิเคชันเป็นแบบอ่านอย่างเดียว โปรแกรมของคุณสามารถแก้ไขและบันทึกการตั้งค่าขอบเขตผู้ใช้ซึ่งทำให้ผู้ใช้แต่ละคนมีการตั้งค่าของตนเอง การตั้งค่าเหล่านี้ไม่ได้จัดเก็บไว้ในfoo.exe.configไฟล์ (เนื่องจากใน Vista อย่างน้อยโปรแกรมไม่สามารถเขียนไปยังไดเร็กทอรีย่อยใด ๆ ที่Program Filesไม่มีระดับความสูง) จะถูกเก็บไว้ในไฟล์การกำหนดค่าในไดเรกทอรีข้อมูลแอปพลิเคชันของผู้ใช้

เส้นทางไปยังแฟ้มที่เป็นเช่น%appdata%\%publisher_name%\%program_name%\%version%\user.config C:\Users\My Name\AppData\Local\My_Company\My_Program.exe\1.0.0\user.configโปรดทราบว่าหากคุณตั้งชื่อที่ชัดเจนให้กับโปรแกรมของคุณชื่อที่คาดเดายากจะต่อท้ายชื่อโปรแกรมในเส้นทางนี้


1
ดูเหมือนว่าคอมโพเนนต์ My_Company ของเส้นทางจะเป็นค่าเริ่มต้นของ Microsoft ฉันยังไม่พบวิธีเปลี่ยนสิ่งนี้ที่ใช้งานได้จริงหากมีคนรู้ว่าจะดีที่จะเพิ่ม

1
ผู้ใช้ 565869 คุณได้ลองใช้ Visual Studio แล้วเปิดแท็บแอปพลิเคชันคุณสมบัติโครงการคลิกปุ่มข้อมูลการประกอบจากนั้นคุณควรจะสามารถเปลี่ยน บริษัท ทำซ้ำสำหรับแต่ละโครงการในโซลูชันของคุณ
gg89

15

ในขณะที่ค้นหาข้อมูลเกี่ยวกับแฮชในชื่อโฟลเดอร์ฉันเจอ (ผ่านคำตอบนี้ ):

http://blogs.msdn.com/b/rprabhu/archive/2005/06/29/433979.aspx

(แก้ไข: ลิงค์ Wayback Machine: https://web.archive.org/web/20160307233557/http://blogs.msdn.com:80/b/rprabhu/archive/2005/06/29/433979.aspx )

เส้นทางที่แน่นอนของuser.configไฟล์มีลักษณะดังนี้:

<Profile Directory>\<Company Name>\<App Name>_<Evidence Type>_<Evidence Hash>\<Version>\user.config

ที่ไหน

<Profile Directory>- เป็นไดเร็กทอรีโปรไฟล์โรมมิ่งหรือโลคัล การตั้งค่าจะถูกเก็บไว้ตามค่าเริ่มต้นในuser.configไฟล์ภายในเครื่อง ในการจัดเก็บการตั้งค่าในการโรมมิ่งuser.configไฟล์ที่คุณต้องการที่จะทำเครื่องหมายการตั้งค่าที่มีSettingsManageabilityAttributeกับชุดSettingsManageabilityRoaming

<Company Name>- โดยทั่วไปเป็นสตริงที่ระบุโดยAssemblyCompanyAttribute(โดยมีข้อแม้ว่าสตริงจะถูกหลีกเลี่ยงและถูกตัดทอนตามความจำเป็นและหากไม่ได้ระบุไว้ในแอสเซมบลีเรามีขั้นตอนทางเลือก)

<App Name>- โดยทั่วไปจะเป็นสตริงที่ระบุโดยAssemblyProductAttribute(คำเตือนเดียวกันกับชื่อ บริษัท )

<Evidence Type>และ<Evidence Hash>- ข้อมูลที่ได้มาจากหลักฐานโดเมนของแอปเพื่อให้โดเมนแอปและการแยกแอปพลิเคชันที่เหมาะสม

<Version>- โดยทั่วไปจะเป็นเวอร์ชันที่ระบุในไฟล์AssemblyVersionAttribute. สิ่งนี้จำเป็นสำหรับการแยกเวอร์ชันต่างๆของแอปที่ใช้งานควบคู่กันไป

ชื่อไฟล์มักจะเป็นเพียง " user.config"


น่าเสียดายที่ลิงค์ของบล็อกเสีย ฉันแน่ใจว่ามันน่าสนใจ
UweBaemayr

3

อยู่ในโฟลเดอร์ที่มีชื่อแอปพลิเคชันของคุณในโฟลเดอร์ Application Data ในโฟลเดอร์บ้านของผู้ใช้ (C: \ documents and settings \ user บน xp และ c: \ users \ user บน Windows Vista)

มีข้อมูลบางอย่างที่นี่ด้วย

PS: - ลองเข้าถึงโดย% appdata% ในกล่องรัน!



1

การตั้งค่าทั้งหมดของคุณจะถูกเก็บไว้ในไฟล์. config ตามลำดับ

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

หากคุณเพิ่มไฟล์. settings app.config จะถูกเพิ่มโดยอัตโนมัติเพื่อจัดการการตั้งค่าหากคุณยังไม่มี


1

หากไฟล์การตั้งค่าของคุณอยู่ในเว็บแอปไฟล์เหล่านี้จะอยู่ในไฟล์ web.config (ด้านล่างโปรเจ็กต์ของคุณหากอยู่ในโปรเจ็กต์ประเภทอื่นไฟล์เหล่านั้นจะอยู่ในไฟล์ app.config (อยู่ด้านล่างโปรเจ็กต์ของคุณด้วย) .

แก้ไข

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


1
ไม่ถูกต้อง. ไม่มีไฟล์การตั้งค่า app.config ในการเรียกใช้แอปพลิเคชันเนื่องจาก app.config จะถูกเปลี่ยนชื่อเป็น [appname] .exe.config อย่างไรก็ตามไฟล์นี้จะมีเฉพาะการตั้งค่า ApplicationScoped จาก settings.settins
อนุญาโตตุลาการ

@arbiter: บางทีฉันอาจเข้าใจคำถาม แต่อดัมดูเหมือนจะถามเกี่ยวกับค่าเริ่มต้นของเวลาออกแบบ สิ่งเหล่านี้จะถูกเก็บไว้ใน app.config ในเวลาสร้างไฟล์ teh app.config จะถูกคัดลอกไปยังไดเร็กทอรี build และเปลี่ยนชื่อเป็น (theapp.exe.config) อย่างไรก็ตามหากคุณแก้ไขไฟล์นั้นโดยตรง (และทำงานใน Visual Studio) คุณจะเสี่ยงต่อการถูกเขียนทับเนื้อหาในครั้งต่อไปที่คุณสร้าง บรรทัดด้านล่าง: สำหรับแอพที่ปรับใช้ (หรือถ้าคุณกำลังเรียกใช้นอก IDE) ให้เปลี่ยนไฟล์ teh name.exe.config) หากคุณกำลังทำงานใน VS ให้เปลี่ยนค่าเริ่มต้นในการตั้งค่าหรือ app.config
JMarsch

0

สองไฟล์: 1) ไฟล์ app.config หรือ web.config การตั้งค่าของเธอสามารถปรับแต่งได้หลังจากสร้างด้วยโปรแกรมแก้ไขข้อความ 2) ไฟล์ settings.designer.cs ไฟล์นี้มีโค้ดที่สร้างขึ้นโดยอัตโนมัติเพื่อโหลดการตั้งค่าจากไฟล์กำหนดค่า แต่จะมีค่าเริ่มต้นด้วยในกรณีที่ไฟล์กำหนดค่าไม่มีการตั้งค่าเฉพาะ


0

ฉันรู้ว่าได้รับคำตอบแล้ว แต่คุณไม่สามารถซิงโครไนซ์การตั้งค่าในตัวออกแบบการตั้งค่าเพื่อย้ายกลับไปที่การตั้งค่าเริ่มต้นของคุณได้หรือไม่?

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