.NET में Settings.settings फ़ाइल का उपयोग करते समय, कॉन्फ़िगरेशन वास्तव में कहाँ संग्रहीत किया जाता है?


100

.NET में Settings.settings फ़ाइल का उपयोग करते समय, कॉन्फ़िगरेशन वास्तव में कहाँ संग्रहीत किया जाता है? मैं डिफ़ॉल्ट स्थिति पर वापस जाने के लिए सहेजी गई सेटिंग्स को हटाना चाहता हूं, लेकिन यह नहीं ढूँढ सकता कि यह कहाँ संग्रहीत है ... कोई विचार?

जवाबों:


100

यह इस बात पर निर्भर करता है कि आपके द्वारा चुनी गई सेटिंग "उपयोगकर्ता" के दायरे या "एप्लिकेशन" के दायरे में है।

उपयोगकर्ता गुंजाइश

उपयोगकर्ता गुंजाइश सेटिंग्स में संग्रहीत हैं

C: \ Documents and Settings \ username \ Local Settings \ Application Data \ ApplicationName

आप उन्हें रनटाइम पर पढ़ / लिख सकते हैं।

विस्टा और विंडोज 7 के लिए, फ़ोल्डर है

C: \ Users \ username \ AppData \ Local \ ApplicationName

या

C: \ Users \ username \ AppData \ Roaming \ ApplicationName

आवेदन की गुंजाइश

एप्लिकेशन स्कोप सेटिंग को सहेजा जाता है AppName.exe.configऔर वे रनटाइम पर आसानी से पढ़े जाते हैं।


20
Vista और Win7 पर उपयोगकर्ता गुंजाइश सेटिंग्स के लिए फ़ोल्डर C: \ Users \ उपयोगकर्ता नाम \ AppData \ स्थानीय \ ApplicationName \ प्रकाशक \ ApplicationName \ संस्करण या C: \ उपयोगकर्ता \ उपयोगकर्ता नाम \ AppData \ Roaming \ ApplicationName \ Publisher \ ApplicationName \ संस्करण उपयोगकर्ता के आधार पर सेटिंग फलक पर रोमिंग प्रॉपर्टी का मूल्य।
जकदीप

4
जब तक इसका ऐडिन नहीं है, उस स्थिति में यह AppName.dll.config होगा
बेनामी टाइप

4
मेरा स्थानीय user.config विंडोज 7 पर है: C: \ Users \ <username> \ AppData \ Local \ Publisher \ ApplicationName_Eid_EvidenceHash \ Version
लोनली कोडर

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) की तलाश कर रहे हैं, तो यह निम्नलिखित फ़ोल्डर में स्थित होगा (XP XP के लिए):

C: \ Documents and Settings (उपयोगकर्ता नाम) \ Local Settings \ Application Data \ (company-name-if-मौजूद) \ _ (app-name) .exe_ (Url | StrongName) _ (हैश) \ (ऐप-संस्करण) \

Url या StrongName आपके पास असेंबली स्ट्रॉन्ग नेम या नहीं एप्लीकेशन पर निर्भर करता है।


किसी भी विचार का उस मार्ग में हैश में क्या योगदान है? मेरे ऐप के प्रत्येक बाद के रिलीज़ को अलग-अलग हैश मान मिल रहा है, जो कि ApplicationSettingsBase.Upgrad () को निरर्थक कहता है। : /
मल रॉस

2
जब एप्लिकेशन को अहस्ताक्षरित किया जाता है, तो एप्लिकेशन को साइन या पथ होने पर हैश स्ट्रॉन्नाम का SHA1 हैश होता है। यहाँ पर msdn.microsoft.com/en-us/library/ms379611(v=vs.80).aspx
arbiter

20

यह मानते हुए कि आप डेस्कटॉप के बारे में बात कर रहे हैं न कि वेब एप्लिकेशन:

जब आप किसी प्रोजेक्ट में सेटिंग्स जोड़ते हैं, तो VS app.configआपके प्रोजेक्ट डायरेक्टरी में एक फाइल बनाता है और उस फाइल में सेटिंग्स को स्टोर करता है। यह उस Settings.csफ़ाइल को भी बनाता है जो व्यक्तिगत सेटिंग्स को स्थिर एक्सेसर्स प्रदान करती है।

संकलित समय पर, वी.एस. डिफ़ॉल्ट रूप से (आप इसे बदल सकते हैं) app.configबिल्ड डायरेक्टरी में कॉपी कर सकते हैं , निष्पादन योग्य से मिलान करने के लिए इसका नाम बदल सकते हैं (जैसे यदि आपका निष्पादन योग्य नाम दिया गया है foo.exe, तो फ़ाइल का नाम होगा foo.exe.config), जो नाम है। नेट कॉन्फ़िगरेशन प्रबंधक तब दिखता है जब यह रनटाइम पर सेटिंग्स को पुनः प्राप्त करता है।

यदि आप वीएस सेटिंग्स संपादक के माध्यम से एक सेटिंग बदलते हैं, तो यह दोनों app.configऔर अपडेट करेगा Settings.cs। (यदि आप जनरेट किए गए कोड में प्रॉपर्टी ऐक्सेसर्स को Settings.csदेखते हैं, तो आप देखेंगे कि वे एक विशेषता के साथ चिह्नित हैं जिसमें सेटिंग का डिफ़ॉल्ट मान है जो आपकी app.configफ़ाइल में है।) यदि आप app.configफ़ाइल को सीधे संपादित करके सेटिंग बदलते हैं। Settings.csअपडेट नहीं किया जाएगा, लेकिन जब आप इसे चलाते हैं, तो नया मान आपके प्रोग्राम द्वारा उपयोग किया जाएगा, क्योंकि संकलन समय पर app.configकॉपी हो जाता है foo.exe.config। यदि आप इसे बंद करते हैं (फ़ाइल के गुणों को सेट करके), तो आप foo.exe.configफ़ाइल को सीधे निर्माण निर्देशिका में संपादित करके सेटिंग बदल सकते हैं ।

फिर यूजर-स्कॉप्ड सेटिंग्स हैं।

एप्लिकेशन-स्कोप सेटिंग केवल-पढ़ने के लिए हैं। आपका प्रोग्राम उपयोगकर्ता-स्कोप सेटिंग्स को संशोधित और सहेज सकता है, इस प्रकार प्रत्येक उपयोगकर्ता को उसकी अपनी सेटिंग्स की अनुमति देता है। इन सेटिंग्स को foo.exe.configफ़ाइल में संग्रहीत नहीं किया जाता है (चूंकि विस्टा के तहत, कम से कम, प्रोग्राम 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
user565869, क्या आपने विज़ुअल स्टूडियो में कोशिश की है, प्रोजेक्ट प्रॉपर्टी के एप्लिकेशन टैब को खोलें, असेंबली सूचना बटन पर क्लिक करें और फिर आपको कंपनी बदलने में सक्षम होना चाहिए? अपने समाधान में प्रत्येक परियोजना के लिए दोहराएं
gg89

15

फ़ोल्डर नाम में हैश के बारे में पता लगाने के लिए ब्राउज़ करते समय, मुझे पता चला ( इस उत्तर के माध्यम से ):

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

(संपादित करें: वेकबैक मशीन लिंक: https://web.archive.org/web/20160307233557/http://blogs.msdn.com:80/b/rprabhu/archive/2005/06/29/425979.aspx )

user.configफ़ाइलों का सटीक मार्ग कुछ इस तरह दिखता है:

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

कहाँ पे

<Profile Directory>- या तो रोमिंग प्रोफ़ाइल निर्देशिका या स्थानीय एक है। सेटिंग्स को स्थानीय user.configफ़ाइल में डिफ़ॉल्ट रूप से संग्रहीत किया जाता है । रोमिंग में एक सेटिंग स्टोर करने के लिए user.configफ़ाइल, आप के साथ सेटिंग चिह्नित करने की आवश्यकता SettingsManageabilityAttributeके साथ SettingsManageabilityकरने के लिए सेट Roaming

<Company Name>- आम तौर पर स्ट्रिंग द्वारा निर्दिष्ट किया जाता है AssemblyCompanyAttribute(कैविट के साथ कि स्ट्रिंग बच जाती है और आवश्यक रूप से छंटनी होती है, और यदि विधानसभा पर निर्दिष्ट नहीं किया गया है, तो हमारे पास एक फॉलबैक प्रक्रिया है)।

<App Name>- आम तौर पर स्ट्रिंग द्वारा निर्दिष्ट AssemblyProductAttribute(कंपनी के नाम के समान ही)।

<Evidence Type>और <Evidence Hash>- उचित ऐप डोमेन और असेंबली अलगाव प्रदान करने के लिए ऐप डोमेन साक्ष्य से प्राप्त जानकारी।

<Version>- आम तौर पर में निर्दिष्ट संस्करण AssemblyVersionAttribute। इसके लिए अगल-बगल तैनात ऐप के विभिन्न संस्करणों को अलग करना आवश्यक है।

फ़ाइल का नाम हमेशा ' user.config' है।


दुर्भाग्य से ब्लॉग लिंक टूट गया है। मुझे यकीन है कि यह दिलचस्प रहा होगा।
UweBaemayr

3

यह आपके एप्लिकेशन के नाम के साथ एक फ़ोल्डर में है एप्लिकेशन डेटा फ़ोल्डर में उपयोगकर्ता के घर फ़ोल्डर (C: \ दस्तावेज और सेटिंग्स \ उपयोगकर्ता पर xp और c: \ Users \ उपयोगकर्ता Windows Vista पर)।

यहाँ कुछ जानकारी भी है।

पुनश्च: - रन बॉक्स में% appdata% द्वारा इसे एक्सेस करने का प्रयास करें!


2

एर्म, क्या आप अपनी डिफ़ॉल्ट सेटिंग्स को पुनर्स्थापित करने के लिए Settings.Default.Reset () का उपयोग नहीं कर सकते हैं?


1

आपकी सभी सेटिंग्स संबंधित .config फ़ाइल में संग्रहीत हैं।

.Settings फ़ाइल बस सेटिंग्स के एक सेट के लिए एक दृढ़ता से टाइप की गई कक्षा प्रदान करती है जो एक साथ होती हैं, लेकिन वास्तविक सेटिंग्स आपके एप्लिकेशन में app.config या .config फ़ाइल में संग्रहीत होती हैं।

यदि आप एक .settings फ़ाइल जोड़ते हैं, तो एक app.config स्वचालित रूप से सेटिंग्स को घर में जोड़ देगा यदि आपके पास पहले से ही एक नहीं है।


1

यदि आपकी सेटिंग फ़ाइल किसी वेब ऐप में है, तो वे तह web.config फ़ाइल (आपकी परियोजना के ठीक नीचे) में होगी। यदि वे किसी अन्य प्रकार की परियोजना में हैं, तो वे ऐप में होंगे ।config फ़ाइल (आपकी परियोजना के नीचे भी) ।

संपादित करें

जैसा कि टिप्पणियों में बताया गया है: आपकी डिज़ाइन समय एप्लिकेशन सेटिंग्स वेब एप्लिकेशन के अलावा अन्य एप्लिकेशन के लिए एक app.config फ़ाइल में हैं। जब आप निर्माण करते हैं, तो app.config फ़ाइल को आउटपुट डायरेक्टरी में कॉपी किया जाता है, और इसका नाम yourexename .exe.config होगा। रनटाइम के समय, केवल yourexename.exe.config नाम की फ़ाइल पढ़ी जाएगी।


1
गलत। रनिंग एप्लिकेशन में कोई ऐप.कॉन्फ़िग सेटिंग्स फ़ाइल नहीं है, क्योंकि ऐप.कॉन्फ़िग का नाम बदलकर [appname] .exe.config किया जाएगा। और वैसे भी इस फाइल में settings.settins से केवल ApplicationScoped सेटिंग होगी।
आर्बिटर

@arbiter: शायद मैं इस सवाल को गलत समझता हूं, लेकिन एडम डिजाइन-समय की चूक के बारे में पूछते हुए दिखाई दिए। जिन्हें app.config में स्टोर किया जाता है। बिल्ड-टाइम पर, teh app.config फ़ाइल को निर्माण निर्देशिका में कॉपी किया जाता है और इसका नाम बदलकर (theapp.exe.config) कर दिया जाता है। हालाँकि, यदि आप उस फ़ाइल को सीधे संपादित करते हैं (और विजुअल स्टूडियो में काम कर रहे हैं), तो आप अगली बार बनने वाली सामग्री को ओवरराइट करने के जोखिम को चलाते हैं। नीचे पंक्ति: एक परिनियोजित एप्लिकेशन के लिए (या यदि आप आईडीई के बाहर चल रहे हैं), तो teh name.exe.config फ़ाइल बदलें। यदि आप VS में काम कर रहे हैं, या तो सेटिंग में डिफ़ॉल्ट मान बदलें, या app.config
JMarsch

0

दो फ़ाइलें: 1) एक app.config या web.config फ़ाइल। टेक्स्ट एडिटर के साथ बिल्ड के बाद उसकी सेटिंग्स को कस्टमाइज़ किया जा सकता है। 2) settings.designer.cs फ़ाइल। कॉन्फ़िगरेशन फ़ाइल से सेटिंग को लोड करने के लिए इस फाइल में ऑटोजेनरेटेड कोड है, लेकिन कॉन्फिगर फाइल की खास सेटिंग नहीं होने की स्थिति में एक डिफ़ॉल्ट मान भी मौजूद होता है।


0

मुझे पता है कि यह पहले से ही उत्तर दिया गया है, लेकिन क्या आप अपनी डिफ़ॉल्ट सेटिंग्स पर वापस जाने के लिए सेटिंग डिजाइनर में सेटिंग्स को सिंक्रनाइज़ नहीं कर सकते हैं?

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.