写点什么

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

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

关注

评论

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

gRPC凭什么成为微服务通信首选?深度解析RPC进化史

左诗右码

5分钟入门微信小游戏开发(四)

扬_帆_起_航

游戏开发 独立游戏开发

YashanDB企业级备份还原流程详解

数据库砖家

YashanDB全备与增量备份操作指南

数据库砖家

YashanDB企业数据仓库搭建教程

数据库砖家

YashanDB日志管理和监控工具使用指南

数据库砖家

AI大模型×政务热线:数造科技打造企业动态画像的“实时监测引擎”

数造万象

数据 企业 政务 数字化案例 人工智能、

YashanDB开发者教程:快速上手企业级数据库编程

数据库砖家

YashanDB配置优化,提升数据库整体性能

数据库砖家

YashanDB企业级数据库应用开发全流程介绍

数据库砖家

YashanDB全面解析:助力企业数字化转型的核心技术

数据库砖家

YashanDB跨平台部署指南,适应企业多样化环境

数据库砖家

YashanDB连接池配置与优化技巧

数据库砖家

MyEMS:赋能能源管理数字化转型的核心引擎

开源能源管理系统

开源 能源管理系统

YashanDB权限细粒度控制,提升企业数据管理精度

数据库砖家

MyEMS:以数字化引擎驱动能源管理革新,重塑绿色发展新动能

开源能源管理系统

开源 能源管理系统

MyEMS:智能化能源管理的创新实践

开源能源管理系统

开源 能源管理系统

YashanDB结合人工智能提升数据库智能管理水平

数据库砖家

YashanDB面向物联网的数据处理优势分析

数据库砖家

YashanDB日志管理及故障恢复实战指南

数据库砖家

YashanDB跨数据中心灾备构建方法详解

数据库砖家

YashanDB企业数据库安全体系搭建指南

数据库砖家

如何批量杀死 Apache DolphinScheduler 运行中的工作流?

白鲸开源

大数据 开源 工作流 Apache DolphinScheduler 数据调度

YashanDB面向业务的数据库性能优化策略

数据库砖家

YashanDB日志分析与异常检测实战技巧

数据库砖家

AI背诵APP的开发流程详解

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

软件外包公司 AI英语学习 AI背诵

YashanDB跨平台数据迁移教程,轻松实现系统升级

数据库砖家

YashanDB快速入门:从零开始搭建分布式数据库

数据库砖家

YashanDB连接池配置优化及多线程操作最佳实践

数据库砖家

YashanDB配置高并发环境下的数据处理技巧

数据库砖家

YashanDB企业数据管理中的关键技术解析

数据库砖家

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