MSBuild Используя неверную версию блока для компиляции файла RDLC

Я использую управление 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), решение скомпилировало бы.

13
задан Phil Sandler 30 June 2010 в 20:15
поделиться

2 ответа

Это потому, что ваш файл 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 для новой программы просмотра.

7
ответ дан 1 December 2019 в 21:36
поделиться

Оказалось, что мне нужен .Net 4.0 Framework, а точнее 4.x версия MSBuild, которая использует более новую версию библиотеки Microsoft.ReportViewer.Common.

Так что даже если вы используете фреймворк 3.5, если вы создадите rdlc в VS2010, он будет ожидать "компиляции" с помощью инструментов 4.0.

2
ответ дан 1 December 2019 в 21:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: