我有一个 VS2008 Web 应用程序项目,该项目正在预编译而不可更新。当我尝试使用 ReportViewer 加载应显示 RDLC 报告的页面时,它只显示一个空页面。它在非预编译版本中运行良好。可能是什么问题呢?
4 回答
问题是 VS 也尝试编译 RDLC 文件,只留下一个标记文件而不是原始的 .rdlc 文件。ReportViewer 无法处理此问题,并引发错误。这在日志中显示为:
报告定义无效。详细信息:根级别的数据无效。第 1 行,位置 1。
解决方案是将原始 RDLC 文件复制到已部署的应用程序中。这可以在构建后的步骤中自动化。另请参阅此线程以获取有关错误的详细信息以及有关如何编辑 Web 部署项目的构建后步骤的详细信息的帖子。我将以下内容添加到我的 Web 部署项目文件中:
<ItemGroup>
<ReportFiles Include="$(SolutionDir)Path\To\Reports\*.rdlc" />
</ItemGroup>
<Target Name="AfterBuild">
<Copy SourceFiles="@(ReportFiles)" DestinationFolder=".\Release\Reports\" />
</Target>
这为我解决了这个问题:
也就是说,我从 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>
你的回答对我不起作用。在 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>
这可能不是确切的解决方案。我在 VS2013 中试过这个,预编译是发布过程的一部分,而不是构建:
http://msdn.microsoft.com/en-us/library/hh475319(v=vs.110).aspx
展开 File Publish Options,然后选择Precompile during publishing。
post-build 事件在发布/预编译过程之前运行,因此.rdlc
文件在(仍然)被预编译之前被复制。至少,在我看来是这样的。