Конфигурация c # для библиотеки классов - PullRequest
0 голосов
/ 13 июня 2018

У меня есть библиотека классов, которая по умолчанию не имеет app.config.Приложение для этой библиотеки называется «explorer.exe», и я не смогу использовать explorer.exe.config для добавления своих настроек.

Можно ли как-нибудь, чтобы моя библиотека классов прочитала приложение.config?Это должен быть app.config, потому что я намерен зашифровать его во время развертывания с помощью aspnet_regiis (я переименую его в web.config, зашифрую и переименую обратно в app.config).

Ответы [ 2 ]

0 голосов
/ 14 июня 2018

В конце (в соответствии с @Stand__Sure и @tigerswithguitars я создал в своем решении новый проект, который будет консольным приложением. Он будет выполнен при развертывании. Спасибо Stand__Sure за его ссылку на 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 голосов
/ 13 июня 2018

В C # единственная конфигурация, которая действительно имеет значение, это app.config выходного проекта.В случае консольного приложения это будет конфиг .exe.Который появится в bin как {your app name}.exe.config.

. Этот файл можно прочитать, используя ConfigurationManager в System.Configuration DLL.Все использование этого будет указывать на файл конфигурации исполняемого кода, даже в библиотеке классов.Таким образом, любая дополнительная конфигурация, необходимая в импортированной библиотеке классов, должна быть добавлена ​​в этот файл.Это канонический способ работы с конфигурацией.

Если вы действительно хотите иметь какой-то другой файл конфигурации, вы можете использовать:

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

Где overrideConfigFileName указывает на другой app.config файл.Вы можете установить файл в библиотеке классов как Content и убедиться, что он скопирован в выходной каталог во время сборки.Затем вам нужно убедиться, что он включен в окончательный пакет развертывания и все пути совпадают.

...