写点什么

使用 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:553823
用户头像

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

关注

评论

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

KubeWharf的使用指南与学习总结

Geek-yan

运维人员新身份——背锅侠

尚思卓越

运维

天谋科技时序数据库 IoTDB 电力应用案例入选中国信通院「中国通信行业开源创新发展案例集」

Apache IoTDB

企业数字化转型的核心是什么?

优秀

数字化转型 数字化业务转型

为什么越来越多公司开始用低代码开发?

伤感汤姆布利柏

低代码

语音数据集在智能客服系统中的应用与挑战

数据堂

语音数据集在智能语音助手中的应用与挑战

数据堂

续写“敢为”新篇章,TCL实业即将重磅亮相CES 2024

极客天地

大厂 300+ 道前端面试题大全附答案(整理版)+前端常见算法面试题~~全面详细

程序员改bug

程序员 面试 前端 前端开发

语音数据集在智能家居安全系统中的应用与挑战

数据堂

华为天气发起‘暖冬计划’,暖人更暖心

最新动态

详解Prompt框架

Bob Lin

人工智能 AI openai ChatGPT GPT-4

手把手系列!让「引用」为 RAG 机器人回答增加可信度

Zilliz

chatbot Milvus zillizcloud llamaindex rag

丁岩:TiDB 8 年研发工程实践及人才观

编程猫

“开放原子开源大赛”inBuilder低代码开发分赛道圆满落幕,听听他们怎么说!

inBuilder低代码平台

低代码 开源社区 #开源

语音数据集在智能家居中的应用与挑战

数据堂

语音数据集在智能医疗中的应用与挑战

数据堂

长文预警,凭借前端面试题精选大全 ,成功混圈阿里字节腾讯

程序员改bug

程序员 前端 开发 IT 计算机

告别高昂存储,高效灵活管理数据

观测云

日志分析 数据备份

软件测试|新一届<火焰杯>测试开发职业竞赛开始报名啦

霍格沃兹测试开发学社

KubeWharf的使用指南与未来趋势预测

YoLo

KubeWharf

语音数据集在自动驾驶中的应用与挑战

数据堂

构建数字化金融生态系统:云原生的创新方法

明道云

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