【问题标题】:.Rdlc Report in MVC project - Managed Debugging Assistant 'PInvokeStackImbalance'MVC 项目中的 .Rdlc 报告 - 托管调试助手“PInvokeStackImbalance”
【发布时间】:2019-12-14 12:00:58
【问题描述】:

我的最后一份报告即将启动并运行。我对任何其他报告都没有这个问题。我正在尝试根据数据库记录创建报告。当我通过 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);
        }

【问题讨论】:

    标签: c# asp.net-mvc reporting-services rdlc


    【解决方案1】:

    我正在运行 Microsoft.ReportingServices.ReportViewerControl.WebForms 150.1400.0 时遇到同样的问题。

    强制iis express运行64位就可以解决这个问题,步骤:

    • 工具
    • 选项
    • 项目和解决方案
    • Web 项目并检查选项
    • 为网站和项目使用 64 位版本的 IIS Express

    【讨论】:

    • 谢谢!这个解决方案对我有用:)(VS Professional 2019 版本 16.4.4 + Microsoft.ReportingServices.ReportViewerControl.WebForms.150.1400.0)
    【解决方案2】:

    根据这个answer,PInvokeStackImbalance 更像是一个“调试助手”而不是一个异常。所以...

    在我的情况下,由于它不会阻止呈现报告,我只是在调试我的项目时禁用了此异常(请参阅Tell the debugger to continue on user-unhandled exceptions)。这对我有用。

    【讨论】:

    • 非常感谢,在找到了许多解决方案但都不起作用之后,它帮助了很多......
    • 这不是该主题的真实答案,请参阅此链接“c-sharpcode.com/thread/…
    【解决方案3】:

    这对我有用(保留设置):

    var deviceInfo = @"<DeviceInfo>
                        <EmbedFonts>None</EmbedFonts>
                       </DeviceInfo>";
    
    byte[] bytes = rdlc.Render("PDF", deviceInfo);
    

    【讨论】:

    【解决方案4】:

    我的报告也有同样的问题。确保您的报告没有不同的字体。我将报告更改为始终使用 Arial 字体,错误已解决。

    【讨论】:

      【解决方案5】:

      有趣的是,我只使用 Microsoft.ReportViewer.WebForms Version=15.0.0.0 体验过这个 我对以前的版本没有任何问题。什么有效:我做了@Srivaishnav Gandhe。 我混合了 Cambria 和 Ariel 字体。我把所有的坎布里亚都改成了爱丽儿,万岁——一切都奏效了。 还要小心,如果您在定义中设置了文化,并且报告中的日期格式与指定的文化不同,则可能会发生这种情况。因此,将文化设置为中立是安全的:


      &lt;%@ Register assembly="Microsoft.ReportViewer.WebForms, Version=15.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" namespace="Microsoft.Reporting.WebForms" tagprefix="rsweb" %&gt;

      【讨论】:

        【解决方案6】:

        仅在调试时尝试将 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 以外的任何字体似乎会导致问题。

        如果您有兴趣 this MS article 讨论 SSRS 到 PDF 的呈现以及 SSRS 将如何尝试在 PDF 中嵌入字体,但前提是满足非常具体的条件...我猜测这就是失败的地方发生。

        【讨论】:

        • 宾果游戏!谢谢(y)
        【解决方案7】:

        请看这个链接rdlc prblem

        应该是因为pdf rdlc文件中的embedFonts

        【讨论】:

          【解决方案8】:

          在您的 rdlc 报告中,有超过 1 种字体类型。这就是问题的原因。只使用 1 种字体,问题就会消失。

          【讨论】:

          • 不太可能。鉴于其他答案和他们的赞成票。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-02-22
          • 1970-01-01
          • 1970-01-01
          • 2019-12-14
          • 2010-11-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多