Почему мое предварительно скомпилированное веб-приложение не может загрузить отчет RDLC? - PullRequest
1 голос
/ 07 сентября 2010

У меня есть проект веб-приложения VS2008, который предварительно компилируется без возможности обновления .Когда я пытаюсь загрузить страницу, которая должна отображать отчет RDLC, используя ReportViewer, он просто отображает пустую страницу.Он отлично работает в некомпилированной версии.В чем может быть проблема?

Ответы [ 4 ]

4 голосов
/ 07 сентября 2010

Проблема в том, что VS также пытается скомпилировать файлы RDLC, оставляя только файл маркера вместо исходного файла .rdlc. ReportViewer не может справиться с этим и выдает ошибку. Это отображается в журнале как:

Определение отчета недействительно. Подробности: данные на корневом уровне недействительны. Строка 1, позиция 1.

Решение - скопировать исходные файлы RDLC в развернутое приложение. Это можно автоматизировать на этапе после сборки. См. Также эту ветку для получения подробной информации об ошибке и эту публикацию для получения подробной информации о том, как редактировать шаг после сборки для проекта веб-развертывания. Я добавил в файл проекта Web Deployment следующее:

<ItemGroup>
  <ReportFiles Include="$(SolutionDir)Path\To\Reports\*.rdlc" />
</ItemGroup>
<Target Name="AfterBuild">
  <Copy SourceFiles="@(ReportFiles)" DestinationFolder=".\Release\Reports\" />
</Target>
2 голосов
/ 09 июня 2017

Это решило проблему для меня:

https://stephensonger.wordpress.com/2008/09/10/deploying-rdlc-files-in-local-mode-for-asp-net-applications/

То есть я удалил из файла web.config следующее и установил для параметра Действия сборки значение:

<buildProviders>
    <add extension=".rdlc" type="Microsoft.Reporting.RdlBuildProvider, Microsoft.ReportViewer.Common, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</buildProviders>
0 голосов
/ 13 декабря 2017

Ваш ответ не сработал для меня. Следующее сработало для меня, чтобы скопировать файлы после запуска aspnet_compiler.

<Target Name="AdditionalFilesForPackage" AfterTargets="CopyAllFilesToSingleFolderForPackage;CopyAllFilesToSingleFolderForMsDeploy">
   <ItemGroup>
     <ExtraFiles Include="$(MSBuildProjectDirectory)\Path_To_Dir\**\*" />
   </ItemGroup>
   <Copy SourceFiles="@(ExtraFiles)" DestinationFiles="@(ExtraFiles->'$(_PackageTempDir)\Path_To_Dir\%(RecursiveDir)%(Filename)%(Extension)')" SkipUnchangedFiles="true" />
</Target>
0 голосов
/ 19 июня 2014

Возможно, это не точное решение.Я попробовал это в VS2013, и прекомпиляция является частью процесса публикации, а не сборки:

http://msdn.microsoft.com/en-us/library/hh475319(v=vs.110).aspx

Разверните параметры публикации файла, а затем выберите Прекомпилировать вопубликация .

Событие после сборки запускается до процесса публикации / прекомпиляции, поэтому файл .rdlc копируется до (все еще) предварительной компиляции.По крайней мере, для меня это выглядит так.

...