Я работаю с WinForms - проектом, в котором есть пара странных требований. Это существующая бизнес-система, которая устанавливается во многих местах в довольно широком диапазоне сред. Часть этого разнообразия представляет собой смесь версий SQL Server и, что особенно важно, версий SQL Server Reporting Services. У всех есть хотя бы 2005 год, но около 50% наших пользователей знакомы с 2008 годом.
К сожалению, мне нужно иметь возможность запускать отчет на стороне клиента, написанный в RDL версии 2008 года. На данный момент я не могу изменить отчет каким-либо существенным образом, поэтому переписать его в RDL версии 2005 года не вариант. Суть в том, что этот отчет (как написано в 2008 году) требует элемента управления 2008 ReportViewer
. Однако элемент управления 2008 ReportViewer
не может подключиться к SSRS 2005.
Решение, которое я придумал, более чем хакерское, но оно облегчит 90% представленных проблем. Я оставил ссылки, указывающие на версию ReportViewer
2005 года, и я изменяю конфигурацию приложения при запуске, чтобы добавить теги перенаправления привязки сборки, перемещающиеся с версии 9.0.0.0 на 10.0.0.0 для ReportViewer.Common
и ReportViewer.WinForms
если целевой сервер отчетов пользователя работает под управлением 2008 года.
Как бы ни было это решение, оно работает для меня. Пользователи SSRS 2005 могут по-прежнему получать доступ к своим существующим отчетам, но не к новым. Пользователи SSRS 2008 могут получить доступ ко всему. Моя единственная проблема в том, что я не смог найти способ обновить данные конфигурации. Я обновляю эту информацию до того, как какая-либо из сборок будет загружена, но вызов ConfigurationManager.RefreshSection("runtime")
не оказывает никакого влияния. После перезапуска приложения загружаются нужные сборки, но я бы очень хотел, чтобы это изменение вступило в силу немедленно.
Есть какие-нибудь мысли о том, как я могу заставить среду выполнения перезагрузить информацию о перенаправлении привязки из файла App.config
во время выполнения?