MSBuild использует неправильную версию сборки для компиляции файла RDLC - PullRequest
13 голосов
/ 01 июля 2010

Я использую элемент управления ReportViewer из VS 2010 для создания отчетов на стороне клиента (rdlc). На моей машине для разработки все работает нормально, и когда я вручную компилирую (через VS2010) и вручную внедряю на тестовую машину, на которой не установлены инструменты разработки.

Чтобы заставить тестовую машину работать (без установки VS2010 или ReportViewer.exe), мне пришлось добавить ссылки в моем проекте в Microsoft.ReportViewer.Winforms, Microsoft.ReportViewer.Common и Microsoft.ReportViewer.ProcessingModel и иметь их все "Копировать локально".

У меня есть файлы rdlc, настроенные для встроенных ресурсов Build Action =>. Это настройка по умолчанию при добавлении нового rdlc в проект. Я открыт для настройки этого в противном случае, если это решит эту проблему (не знаю, связано ли это).

Проблема: после добавления файлов rdlc решение больше не строится на сервере сборки. Я установил ReportViewer.exe на сервере сборки и убедился, что в GAC есть необходимые сборки. Платформа .Net 4 НЕ установлена ​​на сервере сборки - я не думаю, что это требуется, поскольку решение предназначено для среды выполнения 3.5.

Я считаю, что корень проблемы заключается в следующем из журнала сборки:

Цель "RunRdlCompiler": сборка цель "RunRdlCompiler" полностью. Выходной файл "obj \ Release \ RdlCompile.compiled" делает не существует. Использование задачи "RdlCompile" из сборки «Microsoft.ReportViewer.Common, Версия = 9.0.0.0, Культура = нейтральная, PublicKeyToken = b03f5f7f11d50a3a ". Задача "RdlCompile": Отчет \ RDLC \ GreenReport.rdlc (0,0): Ошибка rsInvalidReportDefinition: определение отчета недействительно. Подробности: определение отчета имеет неверное целевое пространство имен «http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition' который не может быть улучшен.

Из того, что я могу сказать, Microsoft.ReportViewer.Common версии 10.0.0.0 - это то, что следует использовать для «компиляции» rdlc, но MSBuild использует 9.0.0.0. Я полагаю, что если бы я мог заставить его использовать правильную версию (которая установлена ​​в GAC), решение скомпилировалось бы.

Ответы [ 10 ]

7 голосов
/ 01 июля 2010

Это потому, что ваш файл 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 framework и изменить свой файл 3.5 общих целей, чтобы он указывал на новый файл цели ReportingServices, и он должен работать.В любом случае, теоретически я никогда не пробовал.Лучше всего придерживаться версии 4.0, как мы и рассчитывали, когда разрабатывали поддержку MSBuild для новой программы просмотра.

6 голосов
/ 16 мая 2012

Просто установите Microsoft Report Viewer 2010 SP1.

4 голосов
/ 22 сентября 2011

У меня была очень похожая проблема.Внезапно я больше не мог собрать проект VS2010, содержащий файл .rdlc.Я не конвертировал отчеты и не использовал сервер отчетов, все было локально.Я попытался создать новый проект и добавить пустой новый отчет rdlc и нажать «build», и это не сработало.Просто однажды он перестал компилироваться и дал мне следующую ошибку:

The report definition is not valid. Details: The report definition has an invalid target namespace 'http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition' which cannot be upgraded.

Оказывается, проблема была в моем "C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \v10.0 \ ReportingServices \ Microsoft.ReportingServices.targets "файл каким-то образом изменился.Вершина моего файла была:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <UsingTask TaskName="Microsoft.Reporting.RdlCompile" AssemblyName="Microsoft.ReportViewer.Common, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>

И это должно было быть:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <UsingTask TaskName="Microsoft.Reporting.RdlCompile" AssemblyName="Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>

Я изменил это "Использование задачиmsgstr "строка в файле и все снова строится.ДЕЙСТВИТЕЛЬНО расстраивает и съел два дня моей жизни.Надежда опубликовать этот комментарий может помочь кому-то еще в подобной ситуации.

Джим Лафлер

3 голосов
/ 13 ноября 2012

Я попытался переустановить все, и это не сработало. Затем я попытался обновить Microsoft.ReportingServices.targets согласно сообщению Джима, но у меня даже не получилось.

В конце я просто скопировал Microsoft.ReportingServices.targets с другого компьютера (где он работал без ошибок). И что удивительно, это работает.

Дополнительная разница, которую я заметил при сравнении, для изменения PublicKeyToken вместе с Версия .

Это может быть только для меня, но пост Джима был очень полезен.

SFUH

2 голосов
/ 19 апреля 2014

У меня та же проблема: мы используем ReportViewer 2012 (версия сборок начинается с 11).Как на локальных машинах, так и на сборочных машинах установлены пакет ReportViewer 2012 и VisualStudio 2013. На локальных машинах компиляция в VS завершается успешно, но на сборочной машине во время сборки в очереди MSBuild выдает такую ​​ошибку:

The report definition is not valid. Details: The report definition has an invalid target 
namespace 'http://schemas.microsoft.com/sqlserver/reporting/2010/01/reportdefinition' 
which cannot be upgraded.

Я пытался изменитьMicrosoft.Common.targets из папки .NET 3.5 таким образом, что описано в этом посте, но безрезультатно.Затем я открыл файл Microsoft.Common.targets из папки .NET 4.0 и нашел там такие строки:

<!-- VS10 without SP1 and without VS11 will not have VisualStudioVersion set, so do
that here -->
<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)'
==''">10.0</VisualStudioVersion>
</PropertyGroup>

Затем я понял, что проблема может быть в неправильном значении переменной $ (VisualStudioVersion), поэтому я добавил вОпределение сборки в разделе «Процесс» этого параметра MSBuild:

/p:VisualStudioVersion=12.0

И все заработало!Сборка завершена успешно.Надеюсь, это кому-нибудь поможет.

2 голосов
/ 01 июля 2010

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

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

1 голос
/ 04 октября 2011

Вставка путей к файлам, кажется, не проходит ... как насчет этого:

Было:

TaskName="Microsoft.Reporting.RdlCompile" AssemblyName="Microsoft.ReportViewer.Common, Version=8.0.0.0...

И теперь:

TaskName="Microsoft.Reporting.RdlCompile" AssemblyName="Microsoft.ReportViewer.WebForms, Version=10.0.0.0...

Джеймс

0 голосов
/ 17 ноября 2014

У меня такая же проблема в моей Visual Studio 2013. dll-версия службы отчетов в моем проекте: Версия = 10.0.0.0, Культура = нейтральная, PublicKeyToken = b03f5f7f11d50a3a

Когда я проверял свои цели ReportingServices

C: \ Program Files \ MSBuild \ Microsoft \ VisualStudio \ v12.0 \ ReportingServices \ Microsoft.ReportingServices.targets

Я нашел версию задачи 11.0.0.0

<UsingTask TaskName="Microsoft.Reporting.RdlCompile" AssemblyName="Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>

Когда я изменил версию задачи на 10.0.0.0, соответствующую версии dll в моем проекте.

<UsingTask TaskName="Microsoft.Reporting.RdlCompile" AssemblyName="Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>

Это сработало.

0 голосов
/ 04 ноября 2013

Я потерял 2 полных дня разработки из-за аналогичной проблемы.При сборке моего проекта это было бы успешно, но при восстановлении это не удалось без ошибок.Изучив подробный журнал сборки в окне «Вывод», он направил меня к проблеме с функцией rdlcompile (таким образом, службы отчетов о проблеме встраивания локальных отчетов).Попробовав все, я наконец-то сумел решить проблему, но отключил свой антивирусный сканер.Антивирус как-то мешал моей перестройке и вызывал сбой перестройки.

После отключения проверки на вирусы перестройка работает 100%

0 голосов
/ 13 мая 2013

NetFx40_LegacySecurityPolicy был включен в моем файле devenv.exe.config, и когда я закомментировал эту строку, проект успешно собран.

Мы включили унаследованную политику безопасности в нашей команде, чтобы позволить нашей команде работать с элементами управления DevExpress 7.2 из Visual Studio 2010, но в этом случае это показывает, что выбранный нами подход не всегда лучший.

...