Подтвердить что ты не робот

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

Я использую элемент управления 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 runtime.

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

Цель "RunRdlCompiler": создание цели "RunRdlCompiler" полностью. Выходной файл "obj\Release\RdlCompile.compiled" делает не существует. Использование задачи "RdlCompile" от сборки "Microsoft.ReportViewer.Common, Версия = 9.0.0.0, Культура = нейтральная, PublicKeyToken = b03f5f7f11d50a3a". Задача "RdlCompile": Report\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), решение будет компилироваться.

4b9b3361

Ответ 1

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

Ответ 2

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

Ответ 3

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

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"/>

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

Джим Лафлер

Ответ 4

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

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

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

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

SFUH

Ответ 5

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

Итак, даже если вы настроите таргетинг на фреймворк 3.5, если вы создадите rdlc с VS2010, он будет "скомпилирован" с использованием 4.0 инструментов.

Ответ 6

У меня та же проблема: мы используем 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

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

Ответ 7

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

Был:

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...

Джеймс

Ответ 8

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

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

Ответ 9

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

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

Ответ 10

У меня такая же проблема на моей Visual Studio 2013. Версия службы отчетов dll для моего проекта: Version = 10.0.0.0, Culture = neutral, 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 на моем proejct.

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

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