Я работаю с WinForms, проектом, в котором есть несколько странных требований. Это существующая бизнес-система, установленная во многих местах в довольно широком диапазоне сред. Частью этого разнообразия является смесь версий SQL Server и, что особенно важно, версий SQL Server Reporting Services. Все используют по крайней мере 2005 год, но около 50% наших пользователей используют какой-то вариант 2008 года.
К сожалению для меня, мне нужно иметь возможность запускать отчет на стороне клиента, написанный в RDL версии 2008. На данный момент я не могу существенно изменить отчет, поэтому переписать его в RDL версии 2005 не получится. Загвоздка в том, что для этого отчета (как он был написан в 2008 году) требуется элемент управления 2008 ReportViewer
. Однако элемент управления ReportViewer
2008 года не может подключиться к службам 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
во время выполнения?