在本地报表中使用自定义代码和子报表时,RDL与RDLC相遇

时间:2014-07-30 14:06:10

标签: ssrs-2008 rdlc rdl report-viewer2010 localreport

我遇到了一个相当复杂的SSRS问题。

首先,我们正在使用本地报告。我们必须这样做,因为我们使用的数据来自休息服务。

其次,我们为报告构建了一个自定义库,名为ReportFunctions,我们想要使用它。

我们正在使用sql server数据工具来构建.rdl(不要与RDLC混淆)然后我们将文件复制到我们的VS项目中。我们将构建操作设置为Content,将Copy设置为New。

这适用于我们所有的基本报告。我们甚至可以使用自定义库。

现在我们想要将其中一些基本报告用作子报告。我们将此报告称为“AllReports”。它由“SummaryReport”和“DetailReport”组成。

摘要和详细信息是两个RDL文件,也需要单独加载。

在构建AllReports的代码中,我有:

reportViewer.LocalReport.SubreportProcessing += LocalReport_SubreportProcessing;

reportViewer.LocalReport.LoadSubreportDefinition("SummaryReport", File.OpenText(Server.MapPath("SummaryReport.rdl")));
reportViewer.LocalReport.LoadSubreportDefinition("DetailReport", File.OpenText(Server.MapPath("DetailReport.rdl")));

private void LocalReport_SubreportProcessing(object sender, SubreportProcessingEventArgs e)
{
    //Set e.DataSources here depending on e.ReportPath
}

当我运行SummaryReport或DetailReport时,它们运行正常。当我运行AllReports时出现错误:

  

在指定位置C:\ path \ to \ my \ project \ Reports \ SummaryReport.rdlc中找不到子报告“SummarySubreport”。请验证子报表是否已发布且名称是否正确。

为了好玩,我将两个子报表的扩展名切换为.rdlc然后当我在visual studio中编译时出现构建错误:

  

加载代码模块时出错:'ReportFunctions,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = d88351e3d4dffe2f'。详细信息:无法加载文件或程序集“ReportFunctions,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = d88351e3d4dffe2f”或其依赖项之一。系统找不到指定的文件。

DetailReport是使用自定义函数外部库的那个。

我不能将我的DLL放在服务器上的任何地方,除了在项目的bin中。我不能强调这一点。我也无法转移到服务器报告。我必须使用本地报告。

如果我在RDLC上将构建操作设置为None,它可以工作,但是当我部署我的RDLC时,不会发布。

我可以编译RDLC吗?我缺少什么使我的报表查看器使用RDL而不是RDLC用于我的子报表?

1 个答案:

答案 0 :(得分:0)

在解决这个问题11个小时后,我发现构建服务器在构建时为所有库分配了修订号。因此,本地ReportFunctions将被赋予1.0.0.0作为版本,一切都很酷。然后,当它被部署时,构建服务器将执行其操作并且报告将中断。

对于遇到此问题的其他人,请检查已编译DLL的版本号,尤其是在使用构建过程时。

另外,为了解决RDLC的编译问题,我们将构建操作切换为None,并且我们设置构建服务器以在构建成功后手动复制任何RDLC文件。