代码之家  ›  专栏  ›  技术社区  ›  Daan

为什么我的预编译web应用程序不能加载RDLC报告?

  •  1
  • Daan  · 技术社区  · 14 年前

    我有一个VS2008 Web应用程序项目,正在进行预编译 没有 可更新。当我尝试使用ReportViewer加载一个应该显示RDLC报告的页面时,它只显示一个空页面。它在非预编译版本中运行良好。有什么问题吗?

    4 回复  |  直到 14 年前
        1
  •  4
  •   Daan    14 年前

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

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

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

    <ItemGroup>
      <ReportFiles Include="$(SolutionDir)Path\To\Reports\*.rdlc" />
    </ItemGroup>
    <Target Name="AfterBuild">
      <Copy SourceFiles="@(ReportFiles)" DestinationFolder=".\Release\Reports\" />
    </Target>
    
        2
  •  2
  •   Sam Persson    7 年前

    这为我解决了问题:

    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>
    
        3
  •  1
  •   DeluxZ    7 年前

    你的回答对我不起作用。在aspnet\u编译器运行后,下面的操作对我来说是复制文件的。

    <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>
    
        4
  •  0
  •   roberth    10 年前

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

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

    展开文件发布选项,然后选择 发布期间预编译 .

    .rdlc 文件在被(仍然)预编译之前被复制。至少,在我看来是这样的。