C# 解决无法识别的属性 configProtectionProvider
在使用.Net自身提供的加密本配置文件后再用System.Configuration.ConfigurationManager.AppSettings["key"]获取值时会出现“无法识别的属性 configProtectionProvider参考”
- 如果你是自定义加密值再保存到配置文件和则Aspnet_regiis.exe不会出现此问题,即不使用.Net默认的加密方式
- 使用.Net默认加密方式示例
Configuration configuration =ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
#region 保存配置文件
try
{
//加密配置信息
if(isProtected &&!configuration.AppSettings.SectionInformation.IsProtected)
{
configuration.AppSettings.SectionInformation.ForceSave=true;
configuration.AppSettings.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");
}
configuration.Save();
}
catch(Exception)
{- 使用此加密方式会加密节点下所有的数据
- .Net自身的加密是跟电脑相关的,即在开发者电脑上生成的配置文件发布到生产机器上(包括所有非开始者电脑)都无法获取配置值会出现以下问题
/// <summary>
/// 获取配置文件指定的值
/// </summary>
/// <param name="key">健</param>
/// <returns>健值</returns>
public static string GetConfig(string key)
{
//如果使用.Net对配置文件进行加密过,则访问ConfigurationManager.AppSettings会产生错误"无法识别的属性 configProtectionProvider"
if (string.IsNullOrEmpty(key)||ConfigurationManager.AppSettings[key]==null) return string.Empty;
return ConfigurationManager.AppSettings[key];
}
/// <summary>
/// 获取配置文件指定的值
/// </summary>
/// <param name="key">健</param>
/// <returns>健值</returns>
public static string GetConfig(string key)
{
if (string.IsNullOrEmpty(key)) return string.Empty;
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
if (config.AppSettings.Settings[key] == null)
return string.Empty;
else
return config.AppSettings.Settings[key].Value;
}
/******************************************************************
* 创建人:HTL
* 创建时间:2013-2-21 16:58:54
* 说明:配置文件操作类(Winform,Asp.net)
* Email:huangyuan413026@163.com
*******************************************************************/
using System;
using System.Configuration;
namespace HTL
{
public sealed class ConfigHelp
{
#region appSettings节点
/// <summary>
/// 获取配置文件指定的值
/// </summary>
/// <param name="key">健</param>
/// <param name="defaultvalue">值为Null时返回的默认值</param>
/// <returns>健对应的值,如果为Null返回默认值</returns>
public static string GetConfig(string key, string defaultvalue)
{
string _value = GetConfig(key);
return string.IsNullOrEmpty(_value) ? defaultvalue : _value;
}
/// <summary>
/// 获取配置文件指定的值
/// </summary>
/// <param name="key">健</param>
/// <returns>健对应的值</returns>
public static string GetConfig(string key)
{
if (string.IsNullOrEmpty(key)) return string.Empty;
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
try
{
if (config.AppSettings.Settings[key] == null)
return string.Empty;
else
return config.AppSettings.Settings[key].Value;
}
catch (Exception e)
{
throw e;
}
}
/// <summary>
/// appSettings节点下是否存在某健
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public static bool IsExistKey(string key)
{
if (string.IsNullOrEmpty(key)) return false;
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
return config.AppSettings.Settings[key] != null;
} /// <summary>
/// 对appSettings节点添加健值
/// 如果健已经存在则更改值
/// 添加后重新保存并刷新该节点
/// </summary>
/// <param name="key">添加的健</param>
/// <param name="key">添加的值</param>
public static void AddConfig(string key, string value)
{
if (string.IsNullOrEmpty(key)) return;
Configuration configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
try
{
if (IsExistKey(key))
configuration.AppSettings.Settings[key].Value = value;
else
configuration.AppSettings.Settings.Add(key, value); configuration.Save();
}
catch (Exception)
{
throw;
}
ConfigurationManager.RefreshSection("appSettings");
}
/// <summary>
/// 对appSettings节点添加健值,一次添加或更改多个健值
/// 如果健已经存在则更改值
/// 添加后重新保存并刷新该节点
/// 默认不加密该appSettings节点数据
/// </summary>
/// <param name="dict">添加的健值集合</param>
public static void AddConfig(System.Collections.Generic.Dictionary<string, string> dict)
{
AddConfig(dict, false);
}
/// <summary>
/// 对appSettings节点添加健值
/// 如果健已经存在则更改值
/// 添加后重新保存并刷新该节点
/// 加密后的配置节不能通过ConfigurationManager.AppSettings[key]进行访问,否则会产生错误"无法识别的属性 configProtectionProvider"
/// 可以通过Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None).AppSettings.Settings[key]进行访问
/// </summary>
/// <param name="dict">添加的健值集合</param>
/// <param name="isProtected">是否加密appSettings节点数据,如果为TrueappSettings节点下所有数据都会被加密</param>
public static void AddConfig(System.Collections.Generic.Dictionary<string, string> dict, bool isProtected)
{
if (dict == null || dict.Count <= ) return;
Configuration configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
#region //循环添加或更改健值
foreach (System.Collections.Generic.KeyValuePair<string, string> key_value in dict)
{
if (string.IsNullOrEmpty(key_value.Key)) continue;
if (IsExistKey(key_value.Key))
configuration.AppSettings.Settings[key_value.Key].Value = key_value.Value;
else
configuration.AppSettings.Settings.Add(key_value.Key, key_value.Value);
}//end foreach
#endregion
#region 保存配置文件
try
{
//加密配置信息
if (isProtected && !configuration.AppSettings.SectionInformation.IsProtected)
{
configuration.AppSettings.SectionInformation.ForceSave = true; configuration.AppSettings.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");
}
configuration.Save(); }
catch (Exception)
{
throw;
}
ConfigurationManager.RefreshSection("appSettings");
ConfigurationManager.RefreshSection("configuration");
#endregion
}
/// <summary>
/// 删除AppSettings下指定的Name
/// </summary>
/// <param name="key">要删除的Name</param>
/// <returns></returns>
public static bool Remove(string key)
{
if (!IsExistKey(key)) return false;
Configuration configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
configuration.AppSettings.Settings.Remove(key.Trim());
try
{
configuration.Save();
ConfigurationManager.RefreshSection("appSettings");
return true;
}
catch (Exception)
{
throw;
}
}
#endregion
#region connectionStrings节点
/// <summary>
/// ConnectionStrings.Count
/// </summary>
/// <returns></returns>
public static int GetConnsCount
{
get { return ConfigurationManager.ConnectionStrings.Count; }
}
/// <summary>
/// 读取数据库配置文件(connectionStrings节点)
/// </summary>
/// <param name="key">健名</param>
/// <returns></returns>
public static string GetConnConfig(string key)
{
return !string.IsNullOrEmpty(key) && ConfigurationManager.ConnectionStrings[key] != null ? ConfigurationManager.ConnectionStrings[key].ConnectionString : string.Empty;
}
/// <summary>
/// 健不存在或值为Null
/// </summary>
/// <param name="key">健名</param>
/// <returns></returns>
public static bool GetConfigConnIsNull(string key)
{
return string.IsNullOrEmpty(key) || ConfigurationManager.ConnectionStrings[key] == null || string.IsNullOrEmpty(ConfigurationManager.ConnectionStrings[key].ConnectionString);
}
/// <summary>
/// 保存配置数据库连接字符串
/// 如果不存在连接字符串,则创建并设置字符串
/// </summary>
/// <param name="key">要操作的节点</param>
/// <param name="value">值</param>
public static void AddConnConfig(string key, string value)
{
if (string.IsNullOrEmpty(key)) return;
Configuration configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
if (configuration.ConnectionStrings.ConnectionStrings[key] == null)
configuration.ConnectionStrings.ConnectionStrings.Add(new ConnectionStringSettings(key, value));
else
{
foreach (ConnectionStringSettings conn in configuration.ConnectionStrings.ConnectionStrings)
{
if (conn.Name != key || conn.ConnectionString == value) continue;
conn.ConnectionString = value;
break;
}
}
try
{
configuration.Save();
}
catch (Exception)
{
throw;
}
ConfigurationManager.RefreshSection("connectionStrings");
}
#endregion
}
}
C# 解决无法识别的属性 configProtectionProvider的更多相关文章
- 无法识别的属性 configProtectionProvider的解决方案
用RsaProtectedConfigurationProvider加密数据库连接字符串时,只要App.config有任何改动,都会提示无法识别的属性 configProtectionProvider ...
- 无法识别的属性“targetFramework”的解决方法
本文导读:网站发布后,在IIS中浏览的时候出现以下异常:无法识别的属性“targetFramework”,请注意属性名称区分大小写.出现这个问题是由IIS配置该站点的.NET Framework 版本 ...
- C# 无法识别的属性“targetFramework”。请注意属性名称区分大小写。错误解决办法
“/CRM”应用程序中的服务器错误. 配置错误 说明: 在处理向该请求提供服务所需的配置文件时出错.请检查下面的特定错误详细信息并适当地修改配置文件. 分析器错误消息: 无法识别的属性“targetF ...
- IIS7.0提示---无法识别的属性“targetFramework”。请注意属性名称区分大小写。
当我把我做的网站放在IIS7.0的服务器上的时候,浏览时提示这个错误信息 配置错误 说明: 在处理向该请求提供服务所需的配置文件时出错.请检查下面的特定错误详细信息并适当地修改配置文件. 分析器错误消 ...
- 分析器错误消息: 无法识别的属性“targetFramework”。请注意属性名称区分大小写。
转自:http://blog.sina.com.cn/s/blog_48964b12010157p0.html 配置错误说明: 在处理向该请求提供服务所需的配置文件时出错.请检查下面的特定错误详细信息 ...
- 无法识别的属性“targetFramework”
问题描述:无法识别的属性“targetFramework”.请注意属性名称区分大小写. 解决办法:修改.NET Framework 版本为相应版本即可,例如2.0换成4.0. 参考:http://bl ...
- 无法识别的属性“targetFramework”。请注意,属性名是大写和小写。错误的解决方案
"/CRM"应用server错. 配置错误 说明: 在处理向该请求提供服务所需的配置文件时出错.请检查以下的特定错误具体信息并适当地改动配置文件. 分析器错误消息: 无法识别的属性 ...
- selenium中webdriver识别class属性多个值中有空格的解决方案
初学自动化测试,貌似大家十有八九都是用百度网站进行练手的,特此感谢百度. http://www.baidu.com 页面中主要就是搜索框和提交按钮: 输入框各元素属性:<input id=&qu ...
- IIS发布网站,访问时出现无法识别的属性“targetFramework”错误
今天在IIS发布网站后,访问时出现无识别的属性“targetFramework”错误 错误描述: 错误原因: 是由IIS配置该站点的.NET Framework 版本与程序中的.NET Framewo ...
随机推荐
- SCU 4442 Party
二分图的最小点权覆盖. 非常感谢巨巨@islands_的解答,还帮我画了一个图. 题目保证给出的边构成的图是一个二分图. 如果没有第三种类型的$frog$,那么问题就很简单了.即选择哪些点,覆盖住所有 ...
- Python开发基础-Day29多线程
概念 进程:进程就是一个程序在一个数据集上的一次动态执行过程 程序:代码 数据集:程序执行过程中需要的资源 进程控制块:完成状态保存的单元 线程:线程是寄托在进程之上,为了提高系统的并发性 线程是进程 ...
- 关于dp骗分
1.样例2.搜索3.大小->贪心:<1>每次选代价最小的两个矩阵 <2> 每次选最大.... ...
- 【BZOJ1098】[POI2007]办公楼biu
题目一开始看以为和强联通分量有关,后来发现是无向边,其实就是求原图的补图的联通块个数和大小.学习了黄学长的代码,利用链表来优化,其实就是枚举每一个人,然后把和他不相连的人都删去放进同一个联通块里,利用 ...
- 51Nod1140 矩阵相乘的结果
随机化算法. A*B==C那么X*A*B==X*C 降到了n*n复杂度. 多次随机X判断即可. By:大奕哥 #include<bits/stdc++.h> using namespace ...
- luoguP4115 QTREE4 链分治
具体看$qzc$论文吧......陈年老物了...... 主要注意每个链头一棵线段树而不是一棵全局线段树 修改操作写完就是正确的,反而是初始化调了好一会...... 跑的还是很快的,有些地方没优化常数 ...
- [BZOJ4260]Codechef REBXOR(Trie)
Trie模板题.求出每个前缀和后缀的最大异或和区间,枚举断点就可.不知为何跑得飞快. #include<cstdio> #include<cstring> #include&l ...
- KMP的小结
http://www.cnblogs.com/kuangbin/archive/2012/08/14/2638803.html 如果有哪一天不记得模板了就去看看大神的 . 非常清晰易懂.
- Nginx 常见问题与错误处理
常见问题与错误处理1. 400 bad request 错误的原因和解决办法配置 nginx.conf 相关设置如下.client_header_buffer_size 16k;large_clien ...
- Nginx 502 Bad Gateway 解决方法
proxy_next_upstream error timeout invalid_header http_500 http_503;或者尝试设置:large_client_header_buffer ...