web-dev-qa-db-ja.com

MVCプロジェクトの.Rdlcレポート-マネージデバッグアシスタント 'PInvokeStackImbalance'

最後のレポートを作成して実行するのにとても近づいています。他のレポートではこの問題は発生していません。データベースレコードに基づいてレポートを作成しようとしています。 LocalReportでレポートを作成し、レポートのパラメーターを作成すると、「マネージデバッグアシスタント 'PInvokeStackImbalance': 'PInvoke関数の呼び出し' Microsoft.ReportViewer.Common!Microsoft.ReportingServices.Rendering.ImageRenderer。 FontPackage :: CreateFontPackage 'がスタックのバランスを崩しています。これは、マネージドPInvokeシグネチャがアンマネージドターゲットシグネチャと一致しないためと考えられます。 PInvokeシグネチャの呼び出し規約とパラメーターがターゲットのアンマネージシグネチャと一致することを確認してください。これは私のMVCプロジェクトの.rdlcレポートです。レコードは正しく、値が挿入されますが、それを表示または作成しようとすると、レポートはエラーになります。行 ‘renderedBytes = localReport.Render(

/* TRACKER_TEST Database Connection ~ Debugging & Testing */
            TRACKER_TESTDataSet dataSet = new TRACKER_TESTDataSet();
            TRACKER_TESTDataSetTableAdapters.Service_Report_FieldsTableAdapter adapter = new TRACKER_TESTDataSetTableAdapters.Service_Report_FieldsTableAdapter();
            LocalReport localReport = new LocalReport();
            localReport.ReportPath = Server.MapPath("~/ReportForms/VirtualService2.rdlc");
            List<TRACKER_TESTDataSet.Service_Report_FieldsRow> report = new List<TRACKER_TESTDataSet.Service_Report_FieldsRow>();
            foreach(var row in list)
            {
                report.Add(adapter.GetDataBy(row.SN1, row.SN2).First());
            }
            ReportDataSource rds = new ReportDataSource("Service_Data", report);
            localReport.DataSources.Add(rds);


            // command specifies whether its a PDF Excel Word IMAGE doc
            string reportType = command;
            string mimeType, encoding, fileNameExtension;

            string deviceInfo =
                "<DeviceInfo>" +
                "   <OutputFormat>" + command + "</OutputFormat>" +
                "   <PageWidth>8.5in</PageWidth>" +
                "   <PageHeight>11in</PageHeight>" +
                "   <MarginTop>0.5in</MarginTop>" +
                "   <MarginLeft>0.3in</MarginLeft>" +
                "   <MarginRight>0.3in</MarginRight>" +
                "   <MarginBottom>0.5</MarginBottom>" +
                "</DeviceInfo>";

            Warning[] warnings;
            string[] streams;
            byte[] renderedBytes;

            renderedBytes = localReport.Render(
                reportType,
                deviceInfo,
                out mimeType,
                out encoding,
                out fileNameExtension,
                out streams,
                out warnings);

            return File(renderedBytes, mimeType);
        }
3
Bigbear

興味深いことに、これはMicrosoft.ReportViewer.WebForms Version = 15.0.0.0でのみ発生しました。以前のバージョンでは問題はありませんでした。そして何がうまくいったか:私は@Srivaishnav Gandheとしてやった。カンブリアとアリエルのフォントが混在していました。私はすべてのカンブリアをアリエルとフーレイに変えました-すべてうまくいきました。また、定義にカルチャを設定し、レポートに指定されたカルチャとは異なるフォーマットの日付を指定した場合にも発生する可能性があることに注意してください。したがって、文化を中立に設定しても安全です。


<%@ Register Assembly="Microsoft.ReportViewer.WebForms, Version=15.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" namespace="Microsoft.Reporting.WebForms" tagprefix="rsweb" %>

1
Bro Solomon

私の報告にも同じ問題がありました。レポートのフォントが異なることを確認してください。レポートを全体的にArialフォントに変更し、エラーを解決しました。

1

RDLCをPDFにデバッグ中にエクスポートしようとすると、このエラーが発生しました。ExcelとWordは問題ありませんでした。

数か月前にReportViewer.WinForms v14からv15にアップグレードしたときに開始されたようですが、プロジェクトがコンパイルされるとエラーが発生しないため、@ marcusgambitが「デバッグ例外」であることについて言及していることを確認して、気付かなかった。

WinFormsプロジェクトで@cyuzの提案を使用しました。プロジェクトの[コンパイル]タブで、[32ビット優先]のチェックを外し、問題を修正しました。

@brosolomonと@srivaishnavgandheによるフォントに関する提案も正しいようです。ArialとTimes New Romanはうまくレンダリングされますが、残りはエラーになります-Calibri、Cambria、Verdana、Wingdings、Tahoma、Segoeをテストしました。

レポートの内容とデータに違いはないようです。RDLCに、ArialまたはTimes New Roman以外のフォントでタグが存在していることが問題の原因のようです。

興味がある場合 このMS記事 は、PDFへのSSRSのレンダリングと、SSRSがPDF =しかし、非常に特定の条件が満たされている場合のみ...これが障害の発生場所であると私は推測しています。

0
AndrewD