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

Crystal Reports确实会减慢ASP.NET网站的构建,有没有排除它们的方法?

  •  5
  • andryuha  · 技术社区  · 15 年前

    帮助一位朋友,他有大约100多份“Crystal Reports 2008”报告,作为“ASP.NET网站项目”的一部分。

    我不知道如何/为什么,但是当这个“ASP.NET网站”项目正在构建时,它将花费大约15分钟“构建”所有Crystal Reports所在的Reports目录。

    Crystal Reports文件.rpt是否可以构建/编译?实际上,它们看起来可以是嵌入的资源。例如,根据本文 http://msdn.microsoft.com/en-us/library/aa287962(VS.71).aspx 您应该能够更改报表是否嵌入属性,但在“ASP.NET网站项目”中,当报表在sol exp中突出显示时,这些属性不可用。

    当建立和发布网站时,所有报告文件仍会放入相应的报告文件夹中。

    所以我想,我的问题是有什么方法可以阻止vs在“网站项目”中构建Crystal Reports?只不过需要很长时间,这是无法忍受的。

    3 回复  |  直到 14 年前
        1
  •  2
  •   andryuha    14 年前

    谢谢你的建议。结果发现,它被设置为作为一种资源嵌入,而这一过程几乎要花费100美元。将其设置为false,生成时间不到一分钟。

    <businessObjects>
        <crystalReports>
            <rptBuildProvider>
                <add embedRptInResource="false"/>
            </rptBuildProvider>
        </crystalReports>
    </businessObjects>
    
        2
  •  1
  •   Josh Weatherly    15 年前

    我们在许多不同的应用程序/网页中使用Crystal Reports。在它们中,我们没有将报表文件本身包含在Visual Studio项目中。我们将文件放在类似a/reports的子目录中,然后通过文件名引用它们。我们仍在使用相当旧的水晶版本,但我不认为他们会把这种东西拿出来。

    我们使用如下代码:

    Dim myRpt As New ReportDocument
    Select Case strFormNum
        Case "M5044b"
            strReportPath = Server.MapPath("/Reports/M5044b.rpt")
        <..Snip a lot of case statements...> 
        Case "M5238aWithAI"
            strReportPath = Server.MapPath("/Reports/M5238a_WithAI.rpt")
    End Select
    
    myRpt.Load(strReportPath)
    
    myRpt.SetDatabaseLogon(strCRUser, strCRPassword, strCRServer, strCRDB)
    
    myRpt.SetParameterValue("@nIndex", intNewIndex)
    
    myRpt.DataDefinition.FormulaFields.Item("Version").Text = "'Report Printed: " & Now().ToString & "'"
    
    oStream = myRpt.ExportToStream(ExportFormatType.PortableDocFormat)
    
        3
  •  0
  •   dotjoe    15 年前

    您需要确保不在每个报表上运行自定义工具。默认情况下,当您将Crystal报表添加到项目中时,它将关联这个为报表生成包装类的自定义工具。通过文件名引用报告(如JoshW所演示的)并将报告保存在程序集中要快得多。