写点什么

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

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

关注

评论

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

DAPP(去中心化应用程序)开发

西安链酷科技

(WEB端CAD)网页CAD中的“组”功能开发

WEB CAD SDK

【2026年权威评测】十大海外网红营销服务公司综合对比

Wolink

跨境贸易 海外社媒营销 海外营销推广 沃链Wolink 海外红人营销

六问「大模型落地」— 如何打通企业智能化转型最后一公里?

Fabarta

2026年八大出海舆情监控服务公司盘点

沃观Wovision

出海企业 舆情监控 舆情监测 海外舆情监控 出海舆情

黑龙江三级等保安全合规方案:构建高安全等级防护体系

等保测评

网络安全 信息安全 数据安全 黑龙江等保测评 哈尔滨等保测评

StarRocks 4.0:让 Apache Iceberg 数据真正 Query-Ready

StarRocks

Apache Iceberg Lakehouse 架构 数据湖仓库 StarRocks 4.0 全局 Shuffle

哈尔滨等保测评代办:企业网络安全合规的省心之选

等保测评

网络安全 信息安全 数据安全 黑龙江等保测评 哈尔滨等保测评

哈尔滨等保整改:从测评到合规的实践路径

等保测评

网络安全 信息安全 数据安全 黑龙江等保测评 哈尔滨等保测评

中小企业必看:如何用低预算高效启动海外平台推广?

Wolink

跨境电商 出海 海外社媒营销 海外营销推广 海外红人营销

原点安全多项数据安全能力入选《2025 中国数据安全企业全景图》

原点安全

Finder Windows for mac 浮动窗口访达访问列表

做梦万元户

2025年最新海外网络IP服务商横测:国外网络IP哪家好?(延迟实测 + 场景推荐)

猫头虎

爬虫 IP 网络 代理IP

从0到1:跨境出海全链路实战指南

Wolink

跨境电商 出海企业 海外社媒营销 海外营销推广 海外红人营销

百度智能云与星尘智能、极数迭代达成全栈AI战略合作 共推具身智能“中国方案”

新消费日报

IDMP 1.0.5.0 版本发布:模型计算、可视化、异常检测全面升级

TDengine

原生 APP 开发费用分析

北京木奇移动技术有限公司

原生APP 软件外包公司 APP外包

海外推广必备工具清单:8个提升效率的免费与付费工具

Wolink

跨境电商 海外社媒营销 海外营销推广 品牌出海 海外红人营销

BetterDisplay for mac 显示器调整管理工具

做梦万元户

IDMP 1.0.5.0 版本发布:模型计算、可视化、异常检测全面升级

爱倒腾的程序员

DAPP开发基础知识与应用场景dapp技术开发

西安链酷科技

主流远程控制软件横评盘点:谁才是稳定与易用的王者?

科技经济

OceanBase分区基础知识

老纪的技术唠嗑局

#OceanBase 分区表

效率翻倍!海外平台推广必备的7款免费与付费工具清单

Wolink

跨境电商 海外社媒营销 海外营销推广 品牌出海 海外红人营销

CDN与域名ICP备案的关系浅谈

天翼云开发者社区

CDN

dapp开发-dapp项目开发,DeFi开发,合约开发

西安链酷科技

Oracle数据库审计

运维有小邓

日志管理 日志审计 数据库审计

数字孪生项目外包开发费用分析

北京木奇移动技术有限公司

数字孪生 软件外包公司 webgl开发

详细指南:国科云全面解析SSL证书常见错误与解决方法

防火墙后吃泡面

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