RDL против проблем с RDLC при использовании пользовательского кода и вложенных отчетов в локальном отчете

У меня довольно сложная проблема с SSRS.

Во-первых, мы используем локальные отчеты. Мы должны это сделать, потому что данные, которые мы используем, поступают из сервисов отдыха.

Во-вторых, мы создали настраиваемую библиотеку для наших отчетов под названием ReportFunctions, которую мы хотим использовать.

Мы используем инструменты данных sql server для создания .rdl (не путать с RDLC), а затем копируем файл в наш проект VS. Мы устанавливаем действие сборки на Content и Copy If Newer.

Это отлично работает для всех наших базовых отчетов. Мы даже можем использовать настраиваемую библиотеку.

Теперь мы хотим использовать некоторые из этих базовых отчетов в качестве подотчетов. Назовем этот отчет «Все отчеты». Он состоит из «SummaryReport» и «DetailReport».

Сводка и Подробности - это два файла RDL, которые также необходимо загружать независимо.

В коде для построения AllReports у меня есть следующее:

reportViewer.LocalReport.SubreportProcessing += LocalReport_SubreportProcessing;

reportViewer.LocalReport.LoadSubreportDefinition("SummaryReport", File.OpenText(Server.MapPath("SummaryReport.rdl")));
reportViewer.LocalReport.LoadSubreportDefinition("DetailReport", File.OpenText(Server.MapPath("DetailReport.rdl")));

private void LocalReport_SubreportProcessing(object sender, SubreportProcessingEventArgs e)
{
    //Set e.DataSources here depending on e.ReportPath
}

Когда я запускаю SummaryReport или DetailReport, они работают нормально. Когда я запускаю AllReports, я получаю сообщение об ошибке:

Подотчет «SummarySubreport» не может быть найден в указанном месте C: \ path \ to \ my \ project \ Reports \ SummaryReport.rdlc. Убедитесь, что вложенный отчет был опубликован и что имя правильное.

Ради интереса я переключил расширение двух подчиненных отчетов на .rdlc. Затем я получаю сообщение об ошибке сборки при компиляции в Visual Studio:

Ошибка при загрузке модуля кода: «ReportFunctions, Version = 1.0.0.0, Culture = нейтральный, PublicKeyToken = d88351e3d4dffe2f». Подробности: не удалось загрузить файл или сборку ReportFunctions, Version = 1.0.0.0, Culture = нейтральный, PublicKeyToken = d88351e3d4dffe2f или одну из их зависимостей. Система не может найти указанный файл.

DetailReport - это тот, который использует внешнюю библиотеку пользовательских функций.

Я не могу разместить свою DLL где-либо на сервере, кроме корзины проекта. Я не могу не подчеркнуть этого. Я тоже не могу перейти к отчетам сервера. Я должен использовать местные отчеты.

Если я устанавливаю действие сборки на None на RDLC, оно работает, но когда я развертываю, мой RDLC не публикуется.

Могу ли я скомпилировать RDLC? Что мне не хватает, чтобы средство просмотра отчетов использовало RDL вместо RDLC для моих вложенных отчетов?


person Josh    schedule 30.07.2014    source источник


Ответы (1)


После 11 часов работы над этой проблемой я обнаружил, что сервер сборки присваивает номера ревизий всем библиотекам при их сборке. Итак, локально ReportFunctions была бы указана версия 1.0.0.0, и все было круто. Затем, когда он был развернут, сервер сборки делал свое дело, и отчеты ломались.

Всем, у кого есть эта проблема, проверьте номера версий скомпилированной библиотеки DLL, особенно если вы используете процесс сборки.

Кроме того, чтобы обойти проблему компиляции RDLC, мы переключили действие сборки на None и настроили сервер сборки на копирование любых файлов RDLC вручную после успешного завершения сборки.

person Josh    schedule 31.07.2014