在不解密的情况下覆盖加密的配置部分?
Overwrite encrypted configuration section without decrypting?
当我尝试访问已加密且无法正确解密的配置部分时(例如,有人只是盲目地从另一台机器上获取配置文件)- Configuration
class 抛出异常。我想抓住这种情况并在这种情况下完全重写该部分。
我试图删除并重新添加有问题的部分,但删除似乎被忽略了 - 'catch' 中的第二个语句抛出另一个关于该部分已经存在的异常:
try
{
// this getter might throw an exception - e.g. if encrypted on another machine
var connStrings = config.ConnectionStrings;
}
catch (ConfigurationException)
{
config.Sections.Remove("connectionStrings");
config.Sections.Add("connectionStrings", new ConnectionStringsSection());
}
这可能与我的 connectionStrings 部分位于单独的文件中有关,即我的配置文件有类似 <connectionStrings configSource="connections.config"/>
的内容,而实际加密的内容在 connections.config
文件中。
是否可以仅通过使用 .NET 配置 classes 来完成我需要的操作,而无需退回到直接 XML 操作?
我很确定这会满足您的要求。就我而言,我只是包含了一个虚假的 connectionString 设置:
<connectionStrings>
<add connectionString="foo"/>
</connectionStrings>
我没有包含 "name" 属性,因此尝试读取 ConnectionStrings 会失败,就像您的情况一样:
try {
var x = ConfigurationManager.ConnectionStrings; //blows up
}
catch {
var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
config.Sections.Remove("connectionStrings");
config.Save(); //Now save the changes
ConfigurationManager.RefreshSection("connectionStrings"); //and reload the section
var x = ConfigurationManager.ConnectionStrings; //can now read!
}
您仍然无法执行此操作:
config.Sections.Add("connectionStrings", new ConnectionStringsSection());
因为(至少在我的机器上),它正在从 Machine.config 中获取 connectionStrings。
我怀疑你的情况没问题。现在,您可以根据需要添加自己的连接字符串,而实际上并不需要完全取消连接字符串部分。
当我尝试访问已加密且无法正确解密的配置部分时(例如,有人只是盲目地从另一台机器上获取配置文件)- Configuration
class 抛出异常。我想抓住这种情况并在这种情况下完全重写该部分。
我试图删除并重新添加有问题的部分,但删除似乎被忽略了 - 'catch' 中的第二个语句抛出另一个关于该部分已经存在的异常:
try
{
// this getter might throw an exception - e.g. if encrypted on another machine
var connStrings = config.ConnectionStrings;
}
catch (ConfigurationException)
{
config.Sections.Remove("connectionStrings");
config.Sections.Add("connectionStrings", new ConnectionStringsSection());
}
这可能与我的 connectionStrings 部分位于单独的文件中有关,即我的配置文件有类似 <connectionStrings configSource="connections.config"/>
的内容,而实际加密的内容在 connections.config
文件中。
是否可以仅通过使用 .NET 配置 classes 来完成我需要的操作,而无需退回到直接 XML 操作?
我很确定这会满足您的要求。就我而言,我只是包含了一个虚假的 connectionString 设置:
<connectionStrings>
<add connectionString="foo"/>
</connectionStrings>
我没有包含 "name" 属性,因此尝试读取 ConnectionStrings 会失败,就像您的情况一样:
try {
var x = ConfigurationManager.ConnectionStrings; //blows up
}
catch {
var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
config.Sections.Remove("connectionStrings");
config.Save(); //Now save the changes
ConfigurationManager.RefreshSection("connectionStrings"); //and reload the section
var x = ConfigurationManager.ConnectionStrings; //can now read!
}
您仍然无法执行此操作:
config.Sections.Add("connectionStrings", new ConnectionStringsSection());
因为(至少在我的机器上),它正在从 Machine.config 中获取 connectionStrings。
我怀疑你的情况没问题。现在,您可以根据需要添加自己的连接字符串,而实际上并不需要完全取消连接字符串部分。