Используйте две версии Microsoft.Reporting DLL одновременно в VB - PullRequest
1 голос
/ 02 марта 2010

Задача

Похоже, что MS удалила поддержку вложенных бизнес-объектов в своем компоненте Report Viewer 2010. Мы хотели бы обновить наше веб-приложение, чтобы использовать новые функции, но нам нужно поддерживать обратное сравнение для множества устаревших отчетов.

Предостережения

1: Мы не можем поместить что-либо в GAC, поскольку мы находимся на размещенном общем веб-сервере.
2: Мы находимся в VB, поэтому кажется, что мы не можем использовать псевдонимы (я думаю, что это функция c #), поэтому мы вообще не можем добавлять ссылки в VS, или мы получаем конфликт пространства имен или ссылка уже существует.
3: DLL веб-компонента отчета сам по себе зависит от двух других новых библиотек (например, common.dll и processing.dll)
4. Компонент отчета должен запускаться в главном домене приложения в данный момент (используя ExecuteReportInCurrentAppDomain), например, когда он обращается к бизнес-объектам, они проверяют роли безопасности и т. Д., И это, похоже, не работает, если средство просмотра отчетов работает в другом домене приложения. , Это, вероятно, можно обойти.

Подход до сих пор

Используйте activator.createinstance или аналогичный метод отражения и поместите новые библиотеки в подпапку каталога bin. Я слышал, что это все равно не будет работать, так как веб-узел не сможет найти другие библиотеки DLL (общие и обрабатывающие), от которых он зависит.

Возможны другие идеи

Создайте новый проект C #, который управляет выбором.

1 Ответ

1 голос
/ 03 марта 2010

На случай, если кому-то интересно.
1) Я создал проект на C #
2) Я переименовал одну из необходимых мне dll и сослался на них обоих 3) Я изменил свойство Alias ​​ссылок в VS на reportViewer2005 или reportViewer2008 соответственно.
4) Я создал интерфейс IReportViewer, который мое устаревшее приложение использует для взаимодействия, когда оно хочет создать отчет.
5) Я использовал extern alias ReportViewer2010Alias; и extern alias ReportViewer2008Alias; в двух новых файлах классов в проекте C #, один для 2010, один для 2008 и реализовал интерфейс IReportViewer
6) Затем просто подключите различные методы и события внутри

Затем я только что ссылался на проект c # из моего приложения VB. Теперь я могу использовать оба класса, и они, похоже, надежно работают в нашей системе разработки. Пальцы скрещены для тестирования производственного сервера.

...