【发布时间】: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