修改bindingRedirect后刷新App.config

时间:2011-01-18 21:22:06

标签: winforms configuration .net-4.0

我正在使用WinForms这个项目有一些奇怪的要求。这是一个现有的业务系统,安装在相当多种环境下的多个位置。这种类型的一部分是SQL Server版本的混合,并且 - 特别重要 - SQL Server Reporting Services版本。每个人都至少参加了2005年,但是大约50%的用户都处于2008年的某种状态。

对我来说不幸的是,我需要能够运行一个用2008版RDL编写的客户端报告。此时我无法以任何实质性的方式修改报表,因此在2005版RDL中重写它不是一种选择。问题在于,本报告(如2008年所写)需要2008 ReportViewer控件。但是,2008 ReportViewer控件无法连接到2005 SSRS。

我提出的解决方案不仅仅是一个小问题,但它将减轻90%的问题。我已经将引用指向了ReportViewer的2005版本,​​我正在修改启动时的应用程序配置,以便为ReportViewer.Common添加从9.0.0.0版到10.0.0.0版的程序集绑定重定向标记如果用户的目标报表服务器正在运行2008,则为ReportViewer.WinForms

正如这个解决方案所引起的抽搐一样,它对我有用。运行SSRS 2005的用户仍然可以访问他们现有的报告,而不是新报告。运行SSRS 2008的用户可以访问所有内容。我唯一的问题是我无法找到刷新配置数据的方法。我在加载任何程序集之前更新此信息,但调用ConfigurationManager.RefreshSection("runtime")似乎没有任何效果。应用程序重新启动后,会加载正确的程序集,但我真的希望能够让此更改立即生效。

有关如何强制运行时在运行时从App.config文件重新加载绑定重定向信息的任何想法?

1 个答案:

答案 0 :(得分:2)

创建AppDomain后,影响绑定的配置数据是固定的。在代码开始运行之前,在创建主AD时,在默认CLR上会发生这种情况。如果你真的很绝望,那么你可以创建一个辅助AppDomain并给它一个自定义AppDomainSetup与另一个ConfigurationFile。并加载并运行该AD中的常规启动代码。不确定这可能带来什么样的副作用。