写点什么

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

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

关注

评论

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

软件测试 | 奇安信秋招面试题2

测吧(北京)科技有限公司

测试

文心一言 VS 讯飞星火 VS chatgpt (101)-- 算法导论9.3 7题

福大大架构师每日一题

福大大架构师每日一题

定义现代化实时数据仓库,SelectDB 全新产品形态全面发布

SelectDB

数据库 大数据 数据湖 数据分析 云数据库

2024成都电子展|成都国际电子信息展览会

AIOTE智博会

电子信息展 成都电子展 电子信息博览会

你眼中的程序员 vs 程序员眼中的自己,是时候打破刻板印象了丨KubeCon 主题活动

阿里巴巴云原生

阿里云 容器 云原生 AIGC

未来PC将是云电脑? 算力优势成为关键

青椒云云电脑

云电脑

【架构篇】Supabase的Postgrest组件架构介绍

张文平

数据库 postgresql 缓存 多表联查 Postgrest

人工智能 | ChatGPT账号注册

测吧(北京)科技有限公司

测试

RTC才是物联网企业的杀手锏!

X2Rtc

音视频 物联网 IoT RTC

《异构融合计算技术白皮书》正式发布,龙蜥助力新一代信息技术发展

OpenAnolis小助手

开源 白皮书 龙蜥社区 世界计算大会 异构融合计算

软件测试 | 奇安信秋招面试题3

测吧(北京)科技有限公司

测试

亚信科技AntDB数据库 高并发、低延迟、无死锁,深入了解AntDB-M元数据锁的实现

亚信AntDB数据库

AntDB 国产数据库 AntDB数据库

代理价格监控和分布式价格监控有什么不同点?

巨量HTTP

http代理 分布式代理

【聚梦想 创非凡】2023荣耀开发者沙龙 ● 广州站 精彩回顾

荣耀开发者服务平台

互联网 用户增长 云服务 生态合作 行业经验

AI在生活中的惊人应用

测吧(北京)科技有限公司

测试

AI带来的新创浪潮

测吧(北京)科技有限公司

测试

软件测试 | 奇安信秋招面试题1

测吧(北京)科技有限公司

测试

流量治理的基石——基于字节码增强的全链路流量标签透传

华为云开源

微服务 微服务架构 字节码

真香!为什么设计行业流行部署云桌面?

青椒云云电脑

云桌面

人工智能:走向智能化生活

测吧(北京)科技有限公司

测试

极光笔记 | 聊一聊推送系统中事件驱动架构的应用

极光GPTBots-极光推送

雨天出行也安心!用华为天气一眼便知未来雨势

最新动态

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