产品战略专家梁宁确认出席AICon北京站,分享AI时代下的商业逻辑与产品需求 了解详情
写点什么

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

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

关注

评论

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

SAP | Local结构和Global结构

暮春零贰

SAP 结构 10月月更

Go语言 if判断和for循环实战 goto使用的那些坑

王中阳Go

Go golang 学习方法 面试题 10月月更

工赋开发者社区 | Gartner发布2023年十大战略技术趋势

工赋开发者社区

EMQ x 阿里云:云上高效构建,IoT 数据一站处理|直播预告

阿里云弹性计算

物联网 IoT 计算巢

超级app+轻应用带来的改变

Geek_99967b

小程序

数据产品经理那点事儿四

松子(李博源)

大数据 深度思考 高效工作 数据产品经理

ERP外贸管理系统是什么?哪家好?如何选?

优秀

外贸管理 ERP系统 ERP外贸管理系统

技术使用点-mixins的使用

默默的成长

前端 Vue 3 10月月更

数据分析有 AI 帮你,Sugar BI 智能分析全场景介绍

Baidu AICLOUD

数据分析 可视化 BI

工赋开发者社区 | 最小可行架构注意事项:必须考虑分布式处理和数据的位置

工赋开发者社区

工赋开发者社区 | 精益思想与数字化技术难融合?

工赋开发者社区

工赋开发者社区 | 即使是程序员也会喜欢这8种无代码/低代码工具

工赋开发者社区

开源日志收集 肿么选型??

CTO技术共享

个人成长 log 10月月更

手把手教你成为荣耀开发者:如何进行注册与认证?

荣耀开发者服务平台

开发者 手机 新手指南 荣耀 honor

C/C++的类型转换

雪芙花

c c++ 10月月更

知识经济时代,企业该如何进行知识管理?

Baklib

效率工具 知识管理 企业 知识 知识经济

谷歌?新手不推荐 选它就对了

江拥羡橙

前端 工具 浏览器 谷歌 10月月更

来了!2022 XDR网络安全运营新理念峰会即将开幕!

未来智安XDR SEC

网络安全

你会用Go语言的rune类型吗?

王中阳Go

Go golang 学习方法 数据处理 10月月更

分布式事务-引出分布式事务

zarmnosaj

10月月更

vivo 鲁班平台 RocketMQ 消息灰度方案

阿里巴巴云原生

阿里云 云原生 Apache RocketMQ

Vue组件入门(十)Attributes 继承

Augus

Vue 3 10月月更

一起学习 Go 语言设计模式之单例模式

宇宙之一粟

设计模式 单例模式 Go 语言 10月月更

ElasticSearch + Kibana for Kubernetes 硬气功实践 2

CTO技术共享

elasticsearch 个人成长 10月月更

SAP | abap的数据对象

暮春零贰

SAP 10月月更 数据对象

团队实现知识管理,先从知识库做起!

Baklib

效率 效率工具 知识管理 团队 知识

【Java深入学习】一个关于“锁”的程序-上

Geek_65222d

10月月更

真·workshop,来自联通、移动、爱奇艺等14位资深专家与你面对面聊云原生硬核技术|2022云栖大会

OpenAnolis小助手

云原生 虚拟化 云栖大会 龙蜥社区 专场

你一定要看的:Go slice切片详解和实战

王中阳Go

Go golang 高效工作 学习方法 10月月更

外包和自研应该选择呢?教你三招选出最合适自己的平台

千锋IT教育

打破汽车零部件企业供应链壁垒,数商云SCM供应链系统实现一体化采购协同

数商云

数字化转型 供应链 企业数字化

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