写点什么

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

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

关注

评论

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

会声会影软件2023新功能详情介绍

茶色酒

会声会影2023

爱立信钱包平台 (Ericsson Wallet Platform) 与 F5 合作推动金融包容性和赋权

F5 Inc

架构 安全 金融 移动支付

全球律师事务所 Ogletree Deakins 借助 F5 云服务快速实现远程办公

F5 Inc

云计算 远程办公 云服务 律师

无服务器Serverless总结

天翼云开发者社区

CocoaPods的使用问题

刿刀

CocoaPods

昇腾AI新技能,还能预防猪生病?

华为云开发者联盟

人工智能 华为云 华为云开发者联盟 企业号 3 月 PK 榜

SpEL表达式注入漏洞分析、检查与防御

华为云PaaS服务小智

安全 分析

湖北文旅虚拟数字代言人“胡贝儿”首秀,赛博大象助力地方文旅元宇宙落地

科技热闻

软件测试/测试开发 | Frida 实现 Hook 功能的强大能力

测试人

软件测试 自动化测试 测试开发

设备在线/离线状态的缓存方案——实践类

阿里云AIoT

缓存 物联网 存储 数据格式 测试技术

阿里开源自研高性能核心搜索引擎 Havenask

阿里技术

搜索引擎 AI·OS实践

助力企业数字化转型!涛思数据与永洪科技完成战略合作签约

TDengine

tdengine 时序数据库 企业数字化

灰度直方图及直方图均衡化

timerring

图像处理 数字图像处理

技术分享| 如何使用Prometheus实现系统监控报警邮件通知

anyRTC开发者

Linux 运维 Prometheus 服务器 系统监控报警邮件通知

2023年中国人工智能产业趋势报告

易观分析

人工智能 科技 ChatGPT

我直接就是一个下载推特GIF动图的大动作!巨简单!

frank

twitter

这样Debug,排查问题效率大大提升...

采菊东篱下

Java

容器化部署和传统部署的四个区别详细讲解-行云管家

行云管家

容器 容器化部署

错题集

刿刀

堡垒机厂家电话多少?在哪里?怎么样?

行云管家

网络安全 堡垒机 自动化运维

Asian Paints 利用 F5 Silverline Web Application Firewall 实现转型

F5 Inc

数字化转型 托管 云端

PostgreSQL:启动与停止

天翼云开发者社区

ChatGPT “眼”中的开源数据库

墨天轮

数据库 ShardingSphere 开源数据库 Tapdata ChatGPT

火山引擎DataLeap:揭秘字节跳动数据血缘架构演进之路

字节跳动数据平台

云服务 数据血缘 企业号 2 月 PK 榜

构建隐私计算三大生态,百度点石为政务数据要素市场护航

百度安全

隐私计算 百度安全

玩转GaussDB 中的SET操作符

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 3 月 PK 榜

14 条策略助力企业构建更安全的软件供应链

墨菲安全

SBOM 软件供应链安全

2个月内如何在千人团队落地压测平台?

老张

项目管理 性能测试 全链路压测 压测平台

WebUI自动化测试框架搭建之需求整理、详细设计和框架设计

Python 自动化测试 unittest 测试框架 selenium

一文看懂倚天云实例|科普漫画

云布道师

倚天实例

coreldraw2023新功能新图标功能介绍

茶色酒

CorelDraw2023

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