无法从程序集“itextsharp,版本=5.5.5.0,文化=中性,PublicKeyToken=8354ae6d2174ddca”加载类型“iTextSharp.text.html.HtmlPar

Posted

技术标签:

【中文标题】无法从程序集“itextsharp,版本=5.5.5.0,文化=中性,PublicKeyToken=8354ae6d2174ddca”加载类型“iTextSharp.text.html.HtmlParser”【英文标题】:Could not load type 'iTextSharp.text.html.HtmlParser' from assembly 'itextsharp, Version=5.5.5.0, Culture=neutral, PublicKeyToken=8354ae6d2174ddca' 【发布时间】:2015-04-22 00:20:31 【问题描述】:

see this link将html转换为pdf我在webconfig中遇到了这个版本错误,让一些天才找到并解决这个问题。

我的模特

 public class Customer
  
    public int CustomerID  get; set; 
    public string FirstName  get; set; 
    public string LastName  get; set; 
  

我的控制器这是正常的代码

 public ActionResult Index()
    
        List<Customer> customers = new List<Customer>();

        for (int i = 1; i <= 10; i++)
        
            Customer customer = new Customer
            
                CustomerID = i,
                FirstName = string.Format("FirstName0", i.ToString()),
                LastName = string.Format("LastName0", i.ToString())
            ;
            customers.Add(customer);
        
        return View(customers);
    

这是用于pdf转换控制器的

public ActionResult PDF()
    
        List<Customer> customers = new List<Customer>();

        for (int i = 1; i <= 10; i++)
        
            Customer customer = new Customer
            
                CustomerID = i,
                FirstName = string.Format("FirstName0", i.ToString()),
                LastName = string.Format("LastName0", i.ToString())
            ;
            customers.Add(customer);
        

        return new RazorPDF.PdfResult(customers, "PDF");
    

我的网络配置

 <dependentAssembly>
    <assemblyIdentity name="itextsharp" publicKeyToken="8354ae6d2174ddca" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.5.5.0" newVersion="5.5.5.0" />
  </dependentAssembly>

【问题讨论】:

请阅读:similar problem RazorPDF 的许可证是什么?我认为是阿帕奇。在这种情况下,RazorPDF 对 iTextSharp 的使用是非法的。 iTextSharp 具有 copyleft 许可证(版本 5.5.5.0 使用 AGPL),因此 RazorPDF 不能使用它。 RazorPDF 绝不隶属于 iText 集团(我是该集团的首席执行官),并且 RazorPDF 绝不会得到 iText Software 的认可。我建议您尝试其他解决方案。 怎么办不到请参考我在第一行给出的链接 剃须刀 pdf 版本为 1.0.0.0 【参考方案1】:

你有几个问题。

首先,您有一个版本绑定重定向:

<bindingRedirect oldVersion="0.0.0.0-5.5.5.0" newVersion="5.5.5.0" />

这是一个巨大的笼统声明,假设版本 0.0.0.05.5.5.0 之间没有发生任何 API 更改。但是,当 API 发生更改时,一些/许多/大多数/所有库会增加其主要和次要版本号。

第二个,但与第一个有关,在 iTextSharp 4.1.6(4.x 系列中最后一个发布的 iTextSharp,从 Java 2.x 系列移植)和 5 之间实际上有一些 API 更改。在您非常具体的情况下,iTextSharp.text.html.HtmlParser 类已被删除,这就是为什么会出现该异常。

有几种方法可以解决此问题。

选项 #1 - 好方法

    摆脱 RazorPDF。它已经两年半没有更新了,它需要一个过时的 iTextSharp 版本并使用过时的 HTML 解析器。

    切换到使用 iTextSharp 更新的 HTML 解析 XmlWorker。 See this (long winded) answer for how to use it.

选项 #2 - 糟糕的方式

    阅读官方iText website's sales FAQ page上的第四个框标题“为什么我不应该使用iText 2.x(或iTextSharp 4.x)?”

    下载 iTextSharp 4.1.6 源代码。你需要自己寻找这个。不要问从哪里获得它,因为这个版本不受社区甚至软件制造商的支持。

    让您的法律顾问逐行检查源代码,以确保其符合您所在司法管辖区的法律以及任何有关版权的国际条约。说真的。

    如果您的法律顾问批准源代码,编译它,移除绑定重定向并将 DLL 放入您的项目中。

    接受这样一个事实,即 4.1.6 版的解析器非常、非常有限,并且有几个已知问题会抛出您认为完全有效的 HTML 的异常。还要接受,如果您要求对这些问题的任何支持,您将被告知两件事,升级到最新版本和从 HTMLWorker 切换到 XmlWorker

选项 #3 - 丑陋的方式(适用于布鲁诺)

    下载official iTextSharp source。

    使用 4.1.6 逻辑或您自己的逻辑重新实现 iTextSharp.text.html.HtmlParser 和所有其他缺失的类、方法和属性。

    编译链接

【讨论】:

你有好的,坏的,......我错过了丑陋的:imdb.com/title/tt0060196 @BrunoLowagie,我为你修好了!

以上是关于无法从程序集“itextsharp,版本=5.5.5.0,文化=中性,PublicKeyToken=8354ae6d2174ddca”加载类型“iTextSharp.text.html.HtmlPar的主要内容,如果未能解决你的问题,请参考以下文章

无法从程序集“System.Web,...”加载类型“...”

C# - 无法从 ResourceManager 获取字符串(来自附属程序集)

无法从程序集 PresentationFramework 加载类型“System.Windows.Controls.Primitives.MultiSelector”

从 .Net Core 运行 Powershell - 无法加载文件或程序集 Microsoft.Management.Infrastructure

System.TypeLoadException:“无法从程序集“System.Web”加载类型“System.Web.HttpContextBase”,

无法从程序集“CLRviaCSharp,版本=1.0.0.0,文化=中性,PublicKeyToken=null”加载类型“MarshalByRefType”