iTextSharp 中的矩阵程序集参考 ASP.NET5
Matrix Assembly Reference in iTextSharp with ASP.NET5
我正在 ASP.NETv5 中尝试 iTextSharp,我有一个 PdfPageEventHelper
,其中覆盖了 OnEndPage
,其中包含以下行:
_cb.AddTemplate(_template, pageSize.GetLeft(295), pageSize.GetBottom(36));
这会引发错误:类型 'Matrix' 在未引用的程序集中定义。您必须添加对程序集的引用 'System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.
我该如何解决这个问题,我是否需要向项目中添加一些内容。
编辑
按照 CodingGorilla 的回答,我将 web.config 更改为:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<runtime>
<assemblyBinding>
<dependentAssembly>
<assemblyIdentity name="System.Drawing"
publicKeyToken="b03f5f7f11d50a3a"
culture="en-us" />
<bindingRedirect oldVersion="2.0.0.0" newVersion="4.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
<system.webServer>
etc...
然而构建仍然失败并提到 2.0.0.0 版本。
所以我认为问题是 iTextSharp 是用 with/for .NET 2.0 编写的,所以它正在寻找 System.Drawing 的 2.0 版本。我从未尝试过使用 System.Drawing
执行此操作,但我认为它会同样有效;您想要做的是向 web.config 添加一个 <bindingRedirect>
元素。查看这篇 MSDN 文章:https://msdn.microsoft.com/en-us/library/7wd6ex19(v=vs.110).aspx 谈到了这一点。
我怀疑 iTextSharp 已经用 ASP.NET 5 进行了测试,所以最后你可能根本无法使用它,因为它依赖于旧版本的框架。
我遇到了同样的问题,System.Drawing
没有被项目引用,添加了对 4.0.0.0 的引用并且成功了
实际上您根本不需要 System.Drawing。我的 类 之一遇到了同样的问题。如果您应用为我解决的问题,您的代码行将如下所示:
_cb.AddTemplate(_template, 1f, 0f, 0f, 1f, pageSize.GetLeft(295), pageSize.GetBottom(36));
这不应改变您代码的预期行为,因为您的行无论如何都会有效地调用此行。
我必须承认,我仍然完全不了解 System.Drawing 是如何发挥作用的。如果方法调用有两个浮点数,则不应解析为 System.Drawing.Drawing2D.Matrix 版本。包含 Matrix 的方法签名甚至被标记为 [Obsolete]。
我正在 ASP.NETv5 中尝试 iTextSharp,我有一个 PdfPageEventHelper
,其中覆盖了 OnEndPage
,其中包含以下行:
_cb.AddTemplate(_template, pageSize.GetLeft(295), pageSize.GetBottom(36));
这会引发错误:类型 'Matrix' 在未引用的程序集中定义。您必须添加对程序集的引用 'System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.
我该如何解决这个问题,我是否需要向项目中添加一些内容。
编辑 按照 CodingGorilla 的回答,我将 web.config 更改为:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<runtime>
<assemblyBinding>
<dependentAssembly>
<assemblyIdentity name="System.Drawing"
publicKeyToken="b03f5f7f11d50a3a"
culture="en-us" />
<bindingRedirect oldVersion="2.0.0.0" newVersion="4.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
<system.webServer>
etc...
然而构建仍然失败并提到 2.0.0.0 版本。
所以我认为问题是 iTextSharp 是用 with/for .NET 2.0 编写的,所以它正在寻找 System.Drawing 的 2.0 版本。我从未尝试过使用 System.Drawing
执行此操作,但我认为它会同样有效;您想要做的是向 web.config 添加一个 <bindingRedirect>
元素。查看这篇 MSDN 文章:https://msdn.microsoft.com/en-us/library/7wd6ex19(v=vs.110).aspx 谈到了这一点。
我怀疑 iTextSharp 已经用 ASP.NET 5 进行了测试,所以最后你可能根本无法使用它,因为它依赖于旧版本的框架。
我遇到了同样的问题,System.Drawing
没有被项目引用,添加了对 4.0.0.0 的引用并且成功了
实际上您根本不需要 System.Drawing。我的 类 之一遇到了同样的问题。如果您应用为我解决的问题,您的代码行将如下所示:
_cb.AddTemplate(_template, 1f, 0f, 0f, 1f, pageSize.GetLeft(295), pageSize.GetBottom(36));
这不应改变您代码的预期行为,因为您的行无论如何都会有效地调用此行。
我必须承认,我仍然完全不了解 System.Drawing 是如何发挥作用的。如果方法调用有两个浮点数,则不应解析为 System.Drawing.Drawing2D.Matrix 版本。包含 Matrix 的方法签名甚至被标记为 [Obsolete]。