写点什么

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

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

关注

评论

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

深度解读设备的“万能语言”鸿蒙系统的分布式软总线能力

华为云开发者联盟

鸿蒙 操作系统 智能设备 HarmonyOS 分布式软总线

如何理解新技术带来的新资产类别?

CECBC

区块链

Redis中哈希分布不均匀该怎么办

Java 数据库 编程 程序员 面试

联动链金-魔方支付体系整理

2020年终总结:回顾、反思、期待

书旅

年终总结

数字钱包系统软件开发|数字钱包APP开发

系统开发

Linux:为什么性能工具需要 BPF 技术

博文视点Broadview

2021年数字货币时代加速到来

CECBC

数字人民币

腾讯T3大佬亲自教你!一起刷完了这份1307页的安卓面试宝典吧,吐血整理

欢喜学安卓

android 程序员 面试 移动开发

数字货币呼之欲出,但这些套路须警惕!

CECBC

数字货币

程序员的简历,要注意以下几点

田维常

简历

mq消费幂等总结

A

MQ 幂等性 db

Nine Ring九环智能合约软件开发|Nine Ring九环智能合约APP系统开发

系统开发

数据结构与算法 - 哈夫曼树

ios 数据结构与算法

爱了爱了!带着问题深入学习Handler,吊打面试官系列!

欢喜学安卓

android 程序员 面试 移动开发

Spring Boot 中集成ActiveMQ

武哥聊编程

Java springboot SpringBoot 2 28天写作 Activemq

MDF智能合约APP开发|MDF智能合约软件系统开发

系统开发

数据库运维家中常备:上限约400MB/s,比COPY等工具还好用的数据利器

华为云开发者联盟

数据 GaussDB 数据迁移 gds FDW

一文带你搞懂从动态代理实现到Spring AOP

华为云开发者联盟

spring jdk 容器 aop 动态代理

软件测试--cookie学习

测试人生路

软件测试

美团图数据库平台建设及业务实践

NebulaGraph

图数据库

基于机器学习的逻辑回归模型

无誉

基于用户画像/AB测试的产品定价

无誉

悟透前端 | ECMAScript 6的Map映射

devpoint

json 大前端 map ES6

图说丨京东《技术重构社会供应链——未来科技趋势白皮书》

京东科技开发者

京东 智能供应链

第一周

Richard

如何成为一名优秀的技术Leader?

架构精进之路

成长笔记 七日更 28天写作

2021面试脚本!夜读互联网Java开发27大专题,终入P7

比伯

Java 程序员 面试 计算机 技术宅

Elasticsearch document 的 _source 元数据

escray

elastic 七日更 28天写作 死磕Elasticsearch 60天通过Elastic认证考试

HPC on Volcano:容器在气象行业HPC高性能计算场景的应用

华为云原生团队

大数据 容器 云原生 k8s 分布式计算

点位盘,点位盘开发,点位盘合约交易。

v16629866266

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