簡體   English   中英

iLMerge企業庫5.0

[英]iLMerge Enterprise Library 5.0

有沒有人成功完成iLMerged Enterprise Library 5.0? iLMerge成功創建了合並的dll,並且我的mvc應用程序進行了編譯,但是在啟動應用程序時出現以下錯誤:

SecurityTransparent and SecurityCritical attributes cannot 
be applied to the assembly scope at the same time.

如果您編寫了要合並的所有程序集,並且知道它們中的任何一個都不對程序集的組織做任何假設,則ILMerge非常有用。 但是在許多情況下(尤其是涉及大量反射或動態語言運行時的情況),ILMerge根本不起作用。 有時,事情以令人驚訝和神秘的方式失敗。

當ILMerge發生故障時,Jeffrey Richter提供了一種更可靠的方法,可以將具有多個DLL依賴項的應用程序部署為單個程序集

使用他的方法,每個程序集都可以保留其自己的名稱,強名稱和屬性,從而大大提高了最終應用程序正常運行的機會。

這並非沒有取舍,但即使是ILMerge的作者Mike Barnett在該博客文章的評論中也表示:“作為ILMerge的作者,我認為這太棒了!如果我知道這一點,我永遠也不會寫了ILMerge。”

如果可以使用Richter的方法,則不會絆倒大多數反射或動態陷阱。

實施步驟

  1. 將您依賴的所有第三方程序集嵌入到應用程序的資源中。
  2. AppDomain.CurrentDomain.AssemblyResolve事件注冊一個ResolveEventHandler
  3. 當您的處理程序被駐留在資源中的程序集調用時,請加載該程序集。

您按照以下步驟執行第3部分:

var resourceStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(name);
return Assembly.Load(new BinaryReader(resourceStream).ReadBytes(int.MaxValue));

嘗試僅合並屬於應用程序的DLL,而不合並框架的DLL(System.Web.Mvc.dll,System.Web.Routing.dll和System.Web.Abstractions.dll)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM