2010-09-07 2 views
1

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

+0

На вопрос и ответ на мой собственный вопрос, для будущей справки я и других, которые могут столкнуться с одной и той же проблемой. – Daan

ответ

4

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

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

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

<ItemGroup> 
    <ReportFiles Include="$(SolutionDir)Path\To\Reports\*.rdlc" /> 
</ItemGroup> 
<Target Name="AfterBuild"> 
    <Copy SourceFiles="@(ReportFiles)" DestinationFolder=".\Release\Reports\" /> 
</Target> 
+0

Это похоже на интересную тему, но на ней могут быть некоторые статьи. Я считаю, что мы предлагаем выгрузить проект, а затем отредактировать его, добавив аналогичный выше, правильно? Путаница в том, что профили публикации имеют одну и ту же схему и почти кажутся другой целью для таких целей. – Greg

0

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

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

Expand File Опубликовать Параметры, а затем выберите PreCompile при публикации.

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

2

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

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

То есть, я удалил вытекающее из web.config и установить Build Action к содержанию:

<buildProviders> 
    <add extension=".rdlc" type="Microsoft.Reporting.RdlBuildProvider, Microsoft.ReportViewer.Common, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> 
</buildProviders> 
0

Ваш ответ Ждут» я работаю для меня. Следующие файлы работали для копирования файлов после запуска 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> 
Смежные вопросы