微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ILMerge - 使用通配符并指定主程序集

如何解决ILMerge - 使用通配符并指定主程序集

我有主程序集 MyAssembly.dll 和许多我想合并到主程序集的库。因为它们很多,所以我想使用通配符将它们全部包含在内,如下所示:

ILMerge.exe /wildcard /allowDup /out:MyAssembly.Merged.dll MyAssembly.dll *.dll

这种方法的问题在于它合并了 MyAssembly.dll 两次,导致类型名称重复,因此需要使用 /allowDup 选项。但是这个选项会重命名重复的类型,我不希望这样(我的 DLL 是其他应用程序的插件,所有类型都必须具有原始名称)。 我可以在命令行中省略 MyAssembly.dll,但是因为 ILMerge 按字母顺序合并程序集,它将第一个程序集视为主程序集(例如 Autofac.dll),这导致最终程序集具有错误的元数据(版本等) . 是否可以使用通配符选项排除某些程序集名称

解决方法

是否可以使用通配符选项排除某些程序集名称?

没有。您可以编写一个批处理文件来构建命令行,例如使用 for。您也可以用另一种语言编写脚本。

然而,ilmerge 是过去的产物,它有很多问题。由于它将代码复制到一个程序集中,因此它改变了运行时加载的工作方式,这很容易破坏 WPF 或 ASP.NET Core 等延迟加载程序。

现在我们有 .Net5,它为单程序集二进制文件提供一流的支持,无论是在已安装的环境下运行(如您过去需要的程序集)还是独立的(它也包括 .net5 运行时)。它不会将代码混合成一个程序集,而是坚持将运行时加载的程序集直接与生成的大型“程序集”分开,因此您的实际代码不会改变。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。