10 月 23 - 25 日,QCon 上海站即将召开,现在购票,享9折优惠 了解详情
写点什么

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

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

关注

评论

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

2021-3-29 【PTA】

爱好编程进阶

Java 程序员 后端开发

3年CRUD程序员3个月啃完这份524页PDF成功涨9k!

爱好编程进阶

Java 程序员 后端开发

架构实战营模块二作业

哈啰–J

2021年学习Java还有意义吗?

爱好编程进阶

Java 程序员 后端开发

7-1 银行家算法--安全性检查 (20 分)(思路+详解+知识分析)宝 你今天 AC了吗

爱好编程进阶

Java 程序员 后端开发

TypeScript 变量声明

Emperor_LawD

typescript 基础 5月月更

LeetCode 24:交换链表

武师叔

5月月更

从火车票验票来说Flutter的网络请求会话管理

岛上码农

flutter 安卓开发 跨平台开发 ios 开发 5月月更

30道经典的Java基础面试题集锦

爱好编程进阶

程序员 后端开发

DirectByteBuffer内存释放

爱好编程进阶

Java 程序员 后端开发

Docker从入门到干事,看这一篇就够了

爱好编程进阶

Java 程序员 后端开发

dubbo + zookeeper + spring 分布式系统

爱好编程进阶

Java 程序员 后端开发

linux线上CPU100%排查

入门小站

Linux

读《Software Engineering at Google》(25)

术子米德

架构师成长笔记

30分钟掌握沧湖一体化:flink+hudi

爱好编程进阶

程序员 后端开发

Ajax 使用ajax加上get和post方法,通过后台加载数据,并在网页上进行显示

爱好编程进阶

Java 程序员 后端开发

docker 基本知识

爱好编程进阶

程序员 后端开发

ElasticSearch Client详解

爱好编程进阶

Java 程序员 后端开发

在线JSON转换成Excel文件工具

入门小站

工具

在线Excel转Text工具

入门小站

工具

2021秋招运维工程师岗位常考的知识点

爱好编程进阶

Java 程序员 后端开发

Day146

爱好编程进阶

Java 程序员 后端开发

90后表示已经躺平,我就静静的看着你们00后卷

爱好编程进阶

Java 程序员 后端开发

centos7

爱好编程进阶

Java 程序员 后端开发

CGBTN2110-DAY02总结复习

爱好编程进阶

Java 程序员 后端开发

eclispe git 安装使用

爱好编程进阶

Java 程序员 后端开发

28天面试突击:JVM+Redis

爱好编程进阶

程序员 后端开发

微博系统中“微博评论”的高性能高可用计算架构

哈喽

「架构实战营」

三、应用高可用之数据设计

穿过生命散发芬芳

5月月更 高可用设计

Docker Swarm从部署到基本操作

爱好编程进阶

Java 程序员 后端开发

超级原始人系列盲盒即将上线,PlatoFarm赋能超多权益

BlockChain先知

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