Проблемы с частным развертыванием сборки, когда та же версия уже находится в GAC - Средство просмотра отчетов - PullRequest
1 голос
/ 14 июля 2011

У нас есть приложение WinForms, запускаемое одним щелчком мыши, которое использует Report Viewer 2010. Сборки развертываются в частном порядке, то есть мы не GAC их (AFAIK, это лучший метод, хотя я могу ошибаться).

Мы столкнулись со следующей проблемой. Нам нужна версия 10.0.40219.1 файла Report Viewer (я полагаю, это из VS2010 SP1) - в ней исправлены некоторые ошибки, которых нет в версии RTM (10.0.30319.1). Однако на некоторых машинах, которые мы развертываем, «плохая» (более старая) сборка уже находится в GAC (например, если пользователь установил VS2010 RTM или любое другое программное обеспечение, которое решает GAC Средство просмотра отчетов - это делает TFS, я верить). К сожалению, версия обеих сборок одинакова, 10.0.0.0. Из-за этого загрузчик CLR ВСЕГДА выбирает сборку GAC поверх локально развернутой.

Насколько я понимаю, все методы Assembly.Load… () будут загружаться из GAC в первую очередь, несмотря ни на что, поэтому предварительная загрузка сборки вручную не поможет нам. Единственное решение, которое я вижу, - это GAC сборки ReportViewer, которую мы развертываем, но это не похоже на то, что нужно делать.

Вопрос: как правильно обеспечить загрузку правильной сборки Report Viewer?

Спасибо

Дэйв.

Ответы [ 2 ]

0 голосов
/ 16 июля 2011

Ну, теперь вы можете играть грубо. Если у вас есть полное доверие, вы можете подключить CreateFileW, чтобы открыть локальную копию вместо копии в GAC; однако, если он был задан, это не сработает.

Конечно, вы можете подключить функции реестра, чтобы при сканировании GAC его не было найдено.

Если рассматриваемая сборка представляет собой чисто управляемый код, вы можете запустить его через ildasm, изменить закрытый ключ, запустить его через ilasm, подписать и связать с ним.

0 голосов
/ 14 июля 2011

Assembly.LoadFile (путь) загрузит тот, который вы хотите.

РЕДАКТИРОВАТЬ: неправильно.

...