为什么我的预编译Web应用程序无法加载RDLC报告?

时间:2010-09-07 07:27:39

标签: asp.net rdlc precompiled

我有一个VS2008 Web应用程序项目正在预编译,而无法更新。当我尝试使用ReportViewer加载应显示RDLC报告的页面时,它只显示一个空页面。它在非预编译版本中工作正常。可能是什么问题?

4 个答案:

答案 0 :(得分:4)

问题是VS还尝试编译RDLC文件,只留下一个标记文件而不是原始的.rdlc文件。 ReportViewer无法处理此问题,并抛出错误。这在日志记录中显示为:

  

报告定义无效。详细信息:根级别的数据无效。第1行,第1位。

解决方案是将原始RDLC文件复制到已部署的应用程序。这可以在构建后步骤中自动完成。有关错误的详细信息,请参阅this thread;有关如何编辑Web部署项目的生成后步骤的详细信息,请参阅this post。我将以下内容添加到我的Web部署项目文件中:

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

答案 1 :(得分:2)

这解决了我的问题:

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

也就是说,我从web.config中删除了以下内容,并将Build Action设置为Content:

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

答案 2 :(得分:0)

这可能不是确切的解决方案。我在VS2013中试过这个,预编译是发布过程的一部分,而不是构建:

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

  

展开“文件发布选项”,然后选择发布时预编译

构建后事件在发布/预编译过程之前运行,因此.rdlc文件将被复制,然后(仍然)进行预编译。至少,对我来说这看起来像这样。

答案 3 :(得分: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>