速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

使用 ILMerge 的内化特性时要小心了

  • 2010-08-10
  • 本文字数:851 字

    阅读完需:约 3 分钟

ILMerge 是个.NET 实用工具,可以将多个程序集合并为一个并将类型的可见性由 public 改为 internal。这么做的结果既有积极的一面,也有消极的一面,取决于用户如何使用生成的结果集。

如果开发者创建好了框架或应用,想将其与所有依赖的框架或库绑定起来以向用户隐藏这些内容,同时使得最终的框架易于安装与使用,那么 ILMerge 就是个不错的选择。可以通过命令提示符或编程的方式使用 ILMerge。其中一个可设定的属性是 Internalize,它用于隐藏类型信息,这是通过将这些类型变为 internal 实现的。

微软解决方案架构 MVP 与 NServiceBus 之父 Udi Dahan 曾使用过 ILMerge 将 NServiceBus 1.9 版的所有依赖绑定到一个结果集中,但他没有隐藏任何类型信息,这导致了如下后果:

在开发者使用 NServiceBus 时,所有第三方的类型都公开出来了。对于那些碰巧使用同样版本程序库的开发者来说,这没什么问题,但遗憾的是,使用 Castle 等程序库的开发者们非常挑剔所用的版本——这导致了版本冲突,也就是众所周知的“版本地狱”问题。

在 NServiceBus 2.0 中,Dahan 开始使用 Internalize 特性,但他认为并非所有类型信息都应该隐藏起来:

比如说,NServiceBus 在内部使用了 NHibernate 来持久化长期运行的进程(叫做 sagas),我们希望这种实现细节不要与开发者在 NServiceBus 上所进行的工作发生冲突。要想让 NHibernate 正常工作,它需要向配置环境,尤其是 NHibernate.Cfg.MappingSchema 命名空间中的所有类型公开某些类型信息。

某些用户想要访问绑定程序库的 API,但如果他们都是 internal,那就没法访问了。因此,最好不要改变某些类型的信息。一种可能的解决方案就像 NServiceBus 所做的那样,发布两个版本:一个面向一般用户,他们仅仅使用框架而已;另一个包含了核心二进制文件,面向那些想要完全控制框架的用户。

ILMerge 需要使用.NET Framework 2.0+,它可以合并所有的.NET 程序集,包括使用.NET 1.0/1.1 生成的程序集。该工具只能用在 Windows 上,并不支持 Rotor 和 Mono。

查看英文原文: Using ILMerge Internalization with Caution

2010-08-10 08:553649
用户头像

发布了 88 篇内容, 共 263.0 次阅读, 收获喜欢 8 次。

关注

评论

发布
暂无评论
发现更多内容

Nacos 本地单机版部署步骤和使用 – Spring Cloud 系列教程

程序员泥瓦匠

nacos

创业研发团的组织建设-硬件开发流程

wood

创业 敏捷 28天写作 硬件开发

『腾讯网』幸运彩票是真是假[手机乐乎]

天马行空

幸运彩票是真是假

自定义规则删除过期文件(linux)

liuzhen007

28天写作 12月日更

架构实战营毕业总结

紫云

架构实战营

毕业总结

guangbao

『腾讯网』德国飞艇平台[手机乐乎]

天马行空

德国飞艇平台

hw6-拆分电商系统为微服务

WWH

架构实战营

【LeetCode】从英文中重建数字Java题解

Albert

算法 LeetCode 12月日更

Android C++系列:Linux线程(二)线程原语

轻口味

android 28天写作 12月日更

庞氏骗局:购物就能赚钱

石云升

28天写作 电信诈骗 12月日更 庞氏骗局

天长地久->曾经拥有

mtfelix

28天写作

对研发管理的一些思考

hackstoic

研发管理 规范

模块六作业

沐风

JetPack-Paging3-入门

Changing Lin

12月日更

『腾讯网』腾讯分分彩 官网平台[手机乐乎]

天马行空

腾讯分分彩 官网平台

Springboot异步任务执行及监控

xcbeyond

springboot 异步任务 28天写作 12月日更

长短租用户体验

张老蔫

28天写作

『腾讯网』飞艇技巧图片图解【重点推荐】[手机乐乎]

天马行空

飞艇技巧图片图解

极客时间【架构实战营】第二期 毕业设计

Geek_91606e

架构实战营

35 K8S之kubeconfig配置文件

穿过生命散发芬芳

k8s 28天写作 12月日更

模块五学习总结

Geek_1d37ea

架构实战营

Golang Gin 框架之模型绑定(八)

liuzhen007

28天写作 12月日更

现代软件架构师的10个技巧

俞凡

架构 微服务 云原生

模块五作业

Geek_1d37ea

架构实战营

DDD领域驱动设计落地实践系列

慕枫技术笔记

内容合集 签约计划第二季

毕业设计:电商秒杀系统架构设计

紫云

浅谈指标体系建设(一)

圣迪

再来一篇!看jdk源码大师亲自操刀编写的集合源码!

看点代码再上班

Java 架构 软件技术

在 JavaScript 中创建私有成员

devpoint

JavaScript typescript ES2020 ES6 12月日更

DDD领域驱动设计落地实践:六步拆解DDD

慕枫技术笔记

架构 后端 签约计划第二季

使用ILMerge的内化特性时要小心了_.NET_Abel Avram_InfoQ精选文章