Я использую управление reportviewer из VS 2010 для создания клиентских отчетов (rdlc). Все хорошо работает на моей машине разработки, и когда я вручную компилирую (через VS2010) и вручную развертываюсь к тестовой машине, которой не установили средства разработки.
Чтобы заставить тестовую машину работать (не устанавливая VS2010 или ReportViewer.exe), я должен был добавить ссылки в своем проекте к Microsoft. ReportViewer. Winforms, Microsoft. ReportViewer. Распространенный и Microsoft. ReportViewer. ProcessingModel и имеют их всех "Локальная Копия".
Мне настроили rdlc файлы для Действия Сборки => встроенные ресурсы. Это - настройка по умолчанию при добавлении нового rdlc к проекту. Я открыт для конфигурирования этого иначе, если это разрешило бы эту проблему (никакая идея если его связанное).
Проблема: начиная с добавления rdlc файлов решение больше не основывается на сервере сборки. Я установил ReportViewer.exe на сервере сборки и проверил, что необходимые блоки существуют в GAC. Платформа.Net 4 НЕ установлена на сервере сборки - я не думаю, что это требуется, потому что решение предназначается для 3,5 времен выполнения.
Я полагаю, что корень проблемы является следованием из журнала сборки:
Цель "RunRdlCompiler": Создание цели "RunRdlCompiler" полностью. Выходной файл "obj\Release\RdlCompile.compiled" не существует. Используя задачу "RdlCompile" от блока "Microsoft. ReportViewer. Распространенный, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a". Задача "RdlCompile": Report\RDLC\GreenReport.rdlc (0,0): ошибка rsInvalidReportDefinition: определение отчета не действительно.Подробнее: Определение отчета имеет недопустимое целевое пространство имен 'http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition', который не может быть обновлен.
Из того, что я могу сказать, Microsoft. ReportViewer. Общая версия 10.0.0.0 - то, что должно использоваться, чтобы "скомпилировать" rdlc, но MSBuild, кажется, использует 9.0.0.0. Я верю, мог ли я вынудить это использовать правильную версию (который установлен в GAC), решение скомпилировало бы.
Это потому, что ваш файл Microsoft.Common.Targets указывает на версию сборки 9.0.
Если вы посмотрите в [sysdir] \ Microsoft.NET \ Framework \ v3.5, вы найдете Microsoft.Common.targets
, который во многом определяет то, что делает MSBuild. Эта версия файла общих целей указывает на [Program Files] \ MSBuild \ Microsoft \ VisualStudio \ v9.0 \ ReportingServices \ Microsoft.ReportingServices.targets
, заставляя MSBuild работать с версией 9.0.
Когда вы установили .NET 4.0, вы получили новый файл общих целей в каталоге v4.0.x, этот новый теперь указывает на [Program Files] \ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ ReportingServices \ Microsoft.ReportingServices.targets
, который указывает на версию 10.0 сборок ReportViewer.
10.0 ReportViewer скомпилирован для .NET 3.5 и предназначен для работы как с 3.5, так и с 4.0. Скорее всего, вы могли бы избавиться от платформы .NET 4.0 и изменить свой файл общих целей 3.5, чтобы он указывал на новый целевой файл ReportingServices, и он должен работать. Во всяком случае, теоретически, я никогда не пробовал. Возможно, вам лучше просто придерживаться 4.0, поскольку это то, что мы планировали, когда разрабатывали поддержку MSBuild для новой программы просмотра.
Оказалось, что мне нужен .Net 4.0 Framework, а точнее 4.x версия MSBuild, которая использует более новую версию библиотеки Microsoft.ReportViewer.Common.
Так что даже если вы используете фреймворк 3.5, если вы создадите rdlc в VS2010, он будет ожидать "компиляции" с помощью инструментов 4.0.