मेरे पास एक क्लास लाइब्रेरी है जिसमें डिफ़ॉल्ट रूप से app.config नहीं है। इस लाइब्रेरी के लिए कॉलिंग ऐप "explorer.exe" है और मैं अपनी सेटिंग्स जोड़ने के लिए explorer.exe.config का उपयोग नहीं कर पाऊंगा।

क्या कोई तरीका है जिससे मैं अपनी कक्षा पुस्तकालय को app.config पढ़ सकता हूं? इसे एक app.config होना चाहिए क्योंकि मैं इसे aspnet_regiis का उपयोग करके परिनियोजन के दौरान एन्क्रिप्ट करने का इरादा रखता हूं (मैं इसे web.config का नाम दूंगा, इसे एन्क्रिप्ट करूंगा और इसका नाम बदलकर app.config कर दूंगा)।

0
Sniipe 13 जून 2018, 13:35

2 जवाब

सबसे बढ़िया उत्तर

अंत में (@Stand__Sure और @tigerswithguitars के अनुसार मैंने अपने समाधान के भीतर एक नया प्रोजेक्ट बनाया जो एक कंसोल ऐप होगा। इसे परिनियोजन पर निष्पादित किया जाएगा। स्टैंड_श्योर को उनके https के लिंक के लिए धन्यवाद ://docs.microsoft.com/en-us/dotnet/standard/security/how-to-use-data-protection

कंसोल ऐप निम्न कार्य करता है:

private static void Run()
{
    try
    {
        // Get unencrypted data from Settings.dat
        string[] unencrypted = File.ReadAllLines("C:\\Program Files (x86)\\theAPPSettings\\Settings.dat");

        string unencryptedGuid = unencrypted[0]; //its only 1 setting that I'm interested in

        // Create a file.
        FileStream fStream = new FileStream("C:\\Program Files (x86)\\theAPPSettings\\ProtectedSettings.dat", FileMode.OpenOrCreate);

        byte[] toEncrypt = UnicodeEncoding.ASCII.GetBytes(unencryptedGuid);                

        byte[] entropy = UnicodeEncoding.ASCII.GetBytes("A Shared Phrase between the encryption and decryption");

        // Encrypt a copy of the data to the stream.
        int bytesWritten = Protection.EncryptDataToStream(toEncrypt, entropy, DataProtectionScope.CurrentUser, fStream);

        fStream.Close();

        File.Delete("C:\\Program Files (x86)\\theAPPSettings\\Settings.dat");

        //Console.ReadKey();
    }
    catch (Exception e)
    {
        Console.WriteLine("ERROR: " + e.Message);
    }
}

कॉलिंग ऐप इसे निम्नानुसार डिक्रिप्ट करता है:

FileStream fStream = new FileStream("C:\\Program Files (x86)\\theAPPSettings\\ProtectedSettings.dat", FileMode.Open);

byte[] entropy = UnicodeEncoding.ASCII.GetBytes("A Shared Phrase between the encryption and decryption");

// Read from the stream and decrypt the data.
byte[] decryptData = Protection.DecryptDataFromStream(entropy, DataProtectionScope.CurrentUser, fStream, Length_of_Stream);

fStream.Close();

string temp = UnicodeEncoding.ASCII.GetString(decryptData);
0
Sniipe 14 जून 2018, 16:54

सी # में एकमात्र कॉन्फ़िगरेशन जो वास्तव में मायने रखता है वह आउटपुट प्रोजेक्ट का app.config है। कंसोल ऐप के मामले में यह .exe कॉन्फिग होगा। जो bin में {your app name}.exe.config के रूप में दिखाई देगा।

आप System.Configuration DLL में ConfigurationManager का उपयोग करके इस फ़ाइल को पढ़ सकते हैं। इसके सभी उपयोग कक्षा पुस्तकालय में भी निष्पादन कोड की कॉन्फ़िगरेशन फ़ाइल को इंगित करेंगे। इसलिए आयातित क्लास लाइब्रेरी में आवश्यक किसी भी अतिरिक्त कॉन्फ़िगरेशन को इस फ़ाइल में जोड़ने की आवश्यकता होगी। config से निपटने का यह विहित तरीका है।

यदि आप वास्तव में कुछ अन्य कॉन्फ़िगरेशन फ़ाइल रखना चाहते हैं, तो आप इसका उपयोग कर सकते हैं:

ConfigurationManager.OpenMappedExeConfiguration(
            new ExeConfigurationFileMap
            {
                ExeConfigFilename = overrideConfigFileName
            }, 
            ConfigurationUserLevel.None)

जहां overrideConfigFileName आपकी दूसरी app.config फ़ाइल की ओर इशारा करता है। आप फ़ाइल को क्लास लाइब्रेरी में Content के रूप में सेट कर सकते हैं और सुनिश्चित कर सकते हैं कि बिल्ड समय पर इसे आउटपुट डायरेक्टरी में कॉपी किया गया है। फिर आपको यह सुनिश्चित करना होगा कि यह अंतिम परिनियोजन पैकेज में शामिल है और सभी पथ मेल खाते हैं।

2
tigerswithguitars 13 जून 2018, 13:44