我在 .Net 7 中有一个 .NET MAUI Android 应用程序,它使用 PdfSharpCore 和 MigraDocCore 将报告生成为 PDF 文件。当我在调试配置上构建和部署应用程序时,一切正常。
但是,如果我在 Release 上构建并部署它,无论发生什么更改,单击按钮渲染 PDF 文件总是会抛出完全相同的异常:
System.NullReferenceException: Object reference not set to an instance of an object
at MigraDocCore.DocumentObjectModel.Internals.ValueDescriptor.CreateValue()
at MigraDocCore.DocumentObjectModel.Internals.DocumentObjectDescriptor.GetValue(DocumentObject, GV)
at MigraDocCore.DocumentObjectModel.Internals.Meta.GetValue(DocumentObject, String, GV)
at MigraDocCore.DocumentObjectModel.DocumentObject.GetValue(String, GV) at MigraDocCore.DocumentObjectModel.Visitors.MergedCellList.GetEffectiveBorders(Cell)
at MigraDocCore.Rendering.TableRenderer.FormatCells()
at MigraDocCore.Rendering.TableRenderer.InitFormat(Area, FormtInfo)
at MigraDocCore.Rendering.TableRenderer.Format(Area, FormtInfo)
at MigraDocCore.Rendering.TopDownFormatter.FormatOnAreas(XGraphics, Boolean)
at MigraDocCore.Rendering.FormattedDocument.Format(XGraphics)
at MigraDocCore.Rendering.DocumentRenderer.PrepareDocument()
at MigraDocCore.Rendering.PdfDocumentRenderer.PrepareDocumentRender(Boolean)
at MigraDocCore.Rendering.PdfDocumentRenderer.PrepareRenderPages(Boolean)
at MigraDocCore.Rendering.PdfDocumentRenderer.RenderDocument()
at FarmOrganizer.IO.Exporting.PDF.PdfBuilder.Build()
at FarmOrganizer.ViewModels.ReportPageViewModel.ExportReportAsPDF()
我知道这看起来像是 MigraDocCore 本身的问题,但如果我禁用 AOT 和修剪发布,PDF 导出将完全按预期工作。然而,同时我不想完全放弃 AOT 和修剪带来的优化优势(这在我的应用程序中很明显)。
所以这是我的问题 - 如何正确设置修剪,以便修剪除 MigraDocCore、PdfSharpCore 及其所有依赖项之外的所有内容?
探索互联网没有取得任何成果。我尝试添加以下内容:
<TrimmerRootAssembly Include="MigraDocCore.Rendering" />
但是在我的 .csproj 文件中添加此内容后,它完全破坏了项目,VisualStudio 指出“无法识别 Include 中的元素”。我尝试添加“.ddl”后缀不起作用。如果我像这样添加
TrimmerRootAssembly
:
<TrimmerRootAssembly>MigraDocCore.Rendering</TrimmerRootAssembly>
完全被忽略了。
是否有可能修剪依赖关系,或者我没有正确理解程序集的定义?
您必须指定
RootMode
:
<ItemGroup>
<TrimmerRootAssembly Include="MigraDocCore.Rendering" RootMode="library"/>
</ItemGroup>