Как я могу устранить ошибку String, ссылка не установлена ​​на экземпляр строки? - PullRequest
0 голосов
/ 04 февраля 2020

Я создаю C# Class Librairy для своего проекта для связи с моей базой данных. Я создаю сервис windows для своего проекта и для установки сервиса windows я создаю проект установки.

Я хотел зашифровать строку подключения, чтобы в projectInstaller моей службы windows я делал это :

public override void Install(IDictionary stateSaver)
{
    base.Install(stateSaver);

    string directoryPath = Context.Parameters["TARGETDIR"];
    string connectionStringSetting = Context.Parameters["DB_CONNECTION"];

    string cryptConnectionString = extract.EncryptStr(connectionStringSetting, ConfigurationManager.AppSettings["encryptKeyProject"]);

    string xml = directoryPath + "WindowsService1.exe.config";

    XmlDocument document = new XmlDocument();
    document.Load(xml);

    XmlNode connectionStringNode = document.SelectSingleNode("//configuration/connectionStrings/add[@name='DBContext ']");
    connectionStringNode.Attributes["connectionString"].Value = cryptConnectionString;

    document.Save(xml);
}

И в библиотеке классов (связь с моей базой данных) моего проекта я расшифровываю строку подключения

public class DBContext : DbContext
{    
    public DBContext ()
    {
        ExtractLicenseData extract = new ExtractLicenseData();

        string encryptConnectionString = ConfigurationManager.ConnectionStrings["DBContext"].ConnectionString.ToString();
        string decryptConnectionString = extract.DecryptStr(encryptConnectionString, ConfigurationManager.AppSettings["encryptKeyProject"]);

        ConfigurationManager.ConnectionStrings["DBContext"].ConnectionString = decryptConnectionString;    
    }   
}

Проблема заключается в том, когда я пытаюсь установить свой проект, у меня есть это ошибка:

Ошибка 1001: ссылка на строку не установлена ​​для экземпляра строки.

Имя параметра: s

У кого-то есть решение для меня

1 Ответ

0 голосов
/ 04 февраля 2020

Проблема была ConfigurationManager.AppSettings["encryptKeyProject"]

Если вы хотите иметь доступ к настройке, вы должны сделать это:

Configuration config = ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly().Location);
KeyValueConfigurationElement encryptKey = config.AppSettings.Settings["encryptKeyLicense"];
string cryptConnectionString = extract.EncryptStr(connectionStringSetting, encryptKey.Value.ToString());

И это будет работать!

...