[英]Could not load file or assembly 'itextsharp, Version=5.5.0.0, Culture=neutral, PublicKeyToken=8354ae6d2174ddca' or one of its dependencies
[英]Could not load type 'iTextSharp.text.html.HtmlParser' from assembly 'itextsharp, Version=5.5.5.0, Culture=neutral, PublicKeyToken=8354ae6d2174ddca'
看到此鏈接將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("FirstName{0}", i.ToString()),
LastName = string.Format("LastName{0}", 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("FirstName{0}", i.ToString()),
LastName = string.Format("LastName{0}", i.ToString())
};
customers.Add(customer);
}
return new RazorPDF.PdfResult(customers, "PDF");
}
我的webconfig
<dependentAssembly>
<assemblyIdentity name="itextsharp" publicKeyToken="8354ae6d2174ddca" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.5.5.0" newVersion="5.5.5.0" />
</dependentAssembly>
你有幾個問題。
首先,您有一個版本綁定重定向:
<bindingRedirect oldVersion="0.0.0.0-5.5.5.0" newVersion="5.5.5.0" />
這是一個巨大的總括性聲明,它假定在0.0.0.0
版和5.5.5.0
版之間未進行API更改。 但是,當API發生更改時,某些/很多/大多數/所有庫都會增加其主要版本和次要版本號。
其次,但與第一個有關,在iTextSharp 4.1.6(從Java 2.x系列移植到的4.x系列中的最后一個iTextSharp)和5之間,實際上有一些API更改。 在您的特定情況下,類iTextSharp.text.html.HtmlParser
被刪除,這就是為什么要獲取該異常的原因。
有兩種方法可以解決此問題。
選項1-好方法
擺脫RazorPDF。 它已經有兩年半沒有更新了,它需要一個過時的iTextSharp版本,並使用一個過時的HTML解析器。
切換到使用iTextSharp的較新HTML解析XmlWorker
。 有關如何使用它的信息,請參見此答案(冗長的答案) 。
選項2-錯誤的方式
閱讀iText官方網站的銷售常見問題解答頁面標題上的第四個框:“為什么不使用iText 2.x(或iTextSharp 4.x)?”
下載iTextSharp 4.1.6 源代碼 。 您需要自己尋找。 不要擔心問到哪里可以得到它,因為社區甚至軟件制造商都不支持該版本。
讓您的法律顧問逐行檢查源代碼,以確保其符合您所在管轄區的法律以及任何有關版權的國際條約。 說真的
如果您的法律顧問批准了源代碼,請對其進行編譯,然后刪除綁定重定向並將DLL放入您的項目中。
接受以下事實:版本4.1.6的解析器非常非常有限,並且存在幾個已知問題,這些問題會引發您認為完全有效的HTML的異常。 還接受如果您要求對這些問題提供任何支持,您將被告知兩件事,即升級到最新版本以及從HTMLWorker
切換到XmlWorker
。
選項#3-丑陋的方式 (適用於Bruno)
下載官方的iTextSharp源碼 。
使用4.1.6邏輯或您自己的邏輯重新實現iTextSharp.text.html.HtmlParser
和所有其他缺少的類,方法和屬性。
編譯鏈接
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.