私はこの問題で頭を悩ませています.Crystal Reportを使用したレポートを持つWebアプリケーションがあり、開発用PCでは正常に動作しますが、同じプロジェクトを別のPCにコピーすると、プロジェクト(VS 2003)をロードすると次のメッセージが表示されます。
One or more projects in solution need to be updated to use Crystal Reports XI Release 2. If you choose "Yes", the update will be applied permanently...
「はい」を選択すると、CrystalDecisions.Web リファレンスのバージョンと開発マシンに応じた場所 (この場合は 11.5.3300.0) が正しいことがわかります。
しかし、webapp を実行すると、バージョンとパスが突然 11.0.3300.0 に変更されたことがわかります。
レポートを表示しようとすると、次のエラーが表示されます。
パーサー エラー メッセージ:基本クラスにはフィールド 'CrystalReportViewer1' が含まれていますが、そのタイプ (CrystalDecisions.Web.CrystalReportViewer) はコントロールのタイプ (CrystalDecisions.Web.CrystalReportViewer) と互換性がありません。
asp.netには次のものがあります:
<%@ Register TagPrefix="cr" Namespace="CrystalDecisions.Web" Assembly="CrystalDecisions.Web, Version=11.5.3300.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" %>
これはどのように可能ですか?ここで何が起こっているのですか?
編集 これは私がしたことです:
間違ったバージョン (11.0.3300.0) が次の場所にありました:
C:\Program Files\Common Files\Business Objects\3.0\managed
正しいバージョン (11.5.3300.0) は次の場所にあります。
C:\Program Files\Business Objects\Common\3.5\managed
そのため、間違ったソリューションのファイルを削除しただけで、新しいコンピューターで動作するようになり、webapp の実行時にエラーが発生しなくなりました。レポートは正常に表示されます。
しかし、本番サーバーで同じことをしようとすると、別のエラーが出て、例外になりました:
This report could not be loaded due to the following issue: The type initializer for 'CrystalDecisions.CrystalReports.Engine.ReportDocument' threw an exception.
このエラーの原因は何ですか?
コードは次のとおりです。
Try
Dim cr As New ReportDocument
cr.Load(strpath)
cr.SetDatabaseLogon("user", "pwd")
Select Case rt
Case 1
cr.SummaryInfo.ReportTitle = "RMA Ticket"
Case 2
cr.SummaryInfo.ReportTitle = "Service Ticket"
End Select
'cr.SummaryInfo.ReportTitle = tt
cr.SetParameterValue("TicketNo", tn)
'cr.SummaryInfo.ReportComments = comment
CrystalReportViewer1.PrintMode = CrystalDecisions.Web.PrintMode.ActiveX
CrystalReportViewer1.ReportSource = cr
CrystalReportViewer1.ShowFirstPage()
'cr.Close()
'cr.Dispose()
Catch ex As Exception
MsgBox1.alert("This report could not be loaded due to the following issue: " & ex.Message)
End Try