我正在C#/ VS2010 / .Net4.0中构建一个WinForms应用程序。我的开发机器运行Windows 8.1 64位。该应用程序广泛使用app.config(用户范围)来存储设置。这些包括某些产品注册详细信息,因此整个文件已使用RSAProtectedConfigurationProvider加密。应用程序具有初始运行(由安装程序启动),其中在整个事物被加密之前计算和写入初始设置。这在我的开发机器上工作正常,然后应用程序可以成功读取加密设置。
当我在其他环境中测试应用程序时出现问题(安装了.NET4.0客户端配置文件的Hyper-V下的Windows 7 32/64位和Vista 32/64位)。加密工作正常,但随后访问设置时,System.Configuration.BaseConfigurationRecord.GetSectionRecursive抛出ConfigurationErrorsException。
我意识到RSA加密密钥对于单个机器/用户来说是本地的,因此加密的app.config文件不能“传播”到其他系统,但是这里初始加密是在同一台(虚拟)机器上完成的。在随后用于读取设置的相同用户上下文中。
我尝试在其他测试环境中运行未加密的版本,一切正常,但我确实需要用加密版本对其进行排序。
我注意到的一件事是,虽然我的测试虚拟机使用.NET Framework 4 Client Profile(通过Web安装程序),但我的Windows 8.1构建系统安装了一个名为“.NET Framework 4多目标包”的东西。因此,我的一个理论是这里存在一些差异,但你会认为,如果加密有效,那么同一环境中的解密也应该有效。
欢迎任何想法。
答案 0 :(得分:0)
我发现如果我更改了应用程序的命名空间,会弹出此错误(我猜它损坏了配置文件)。由于设置被复制到%AppData%文件夹,我只是更改了应用程序的版本并进行了重建。错误消失了。