iLMerge Enterprise Library 5.0

本文关键字:Library Enterprise iLMerge | 更新日期: 2023-09-27 18:21:17

是否有人成功地iLMerged Enterprise Library 5.0?iLMerge成功地创建了合并的dll并编译了我的mvc应用程序,但在启动应用程序时,我收到了以下错误:

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

iLMerge Enterprise Library 5.0

ILMerge非常棒,如果您编写了所有要合并的程序集,并且您知道它们都没有对程序集组织进行假设。但在许多情况下(尤其是涉及重反射或动态语言运行时的情况),ILMerge根本不起作用。有时事情会以令人惊讶和神秘的方式失败。

当ILMerge失败时,Jeffrey Richter提供了一种更可靠的方法,可以将具有多个DLL依赖项的应用程序部署为单个程序集。

通过他的方法,每个程序集都可以保留自己的名称、strong名称和属性,大大提高了最终应用程序正常工作的机会。

这并非没有权衡,但即使是ILMerge的作者Mike Barnett也在该博客文章的评论中表示:"作为ILMerge作者,我认为这太棒了!如果我知道这件事,我永远不会写ILMerge。"

如果你能使用里希特的方法,你就不会被大多数反射或动态陷阱绊倒。

实施步骤

  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)