【问题标题】:How can I resolve the error String reference not set to an instance of a string?如何解决错误字符串引用未设置为字符串实例?
【发布时间】:2020-02-04 14:52:30
【问题描述】:

我为我的项目创建了一个 C# 类库,以便与我的数据库进行通信。 我为我的项目创建了一个 Windows 服务,并为 Windows 服务安装创建了一个安装项目。

我想加密我的连接字符串,所以在我的 windows 服务的 projectInstaller 中我这样做:

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

有人可以帮我解决吗?

【问题讨论】:

  • 您的代码中的extract 是什么?
  • @MKR extract 是一个将加密/解密字符串的结果提供给encrypt_key的类
  • “DBContext”和“DBContext”中的尾随空格?
  • 可能在string connectionStringSetting = Context.Parameters["DB_CONNECTION"]; 中没有获得connectionStringSetting 的价值
  • 其中一个方法返回一个null 值,然后将其传递给下一个函数调用。 单步执行代码,检查每一行的字符串值,直到找到为空的那个。如果这只发生在您无法单步执行代码的上下文中(即您的安装程序),请添加为您进行检查的日志记录。

标签: c# windows-services setup-project class-library


【解决方案1】:

问题是ConfigurationManager.AppSettings["encryptKeyProject"]

如果您想访问设置,您必须这样做:

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

它会起作用的!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-19
    • 2020-06-14
    • 1970-01-01
    • 1970-01-01
    • 2014-11-28
    • 2019-12-07
    • 1970-01-01
    • 2021-08-23
    相关资源
    最近更新 更多