AI实践哪家强?来 AICon, 解锁技术前沿,探寻产业新机! 了解详情
写点什么

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

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

关注

评论

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

Android 组件化实战,kotlin协程实现原理

android 程序员 移动开发

Android 进阶之 MVP,高级安卓工程师面试题

android 程序员 移动开发

Android 面试官:这些经验要记录好,面试途中会遇到,做了6年的Android

android 程序员 移动开发

Android 黑科技保活实现原理揭秘,精心整理

android 程序员 移动开发

Android&Java面试题大全—金九银十面试必备【上,大厂Android面试真题精选

android 程序员 移动开发

Android-Apng动画的播放,大牛手把手动态教学,你都不愿意看吗

android 程序员 移动开发

Android-Binder机制及AIDL使用,字节跳动安卓开发面试题

android 程序员 移动开发

Android-Studio-4-0-最新进展,这几个新体验太牛逼了!

android 程序员 移动开发

Android-Studio-教程:入门开发第一个程序,2021年最新Android面试点梳理

android 程序员 移动开发

Android 组件通信中有哪些不为人知的细节?,面试题分享

android 程序员 移动开发

Android-_巧_仿蚂蚁森林水滴动效,androidstudiojni开发

android 程序员 移动开发

Android 网络框架之Retrofit源码解析,android嵌入式开发及实训答案

android 程序员 移动开发

Android 面试主题集合整理,kotlin协程原理

android 程序员 移动开发

Android-11-正式发布---开发者们的舞台已就绪,flutterpush消息

android 程序员 移动开发

Android-APK瘦身实践:二次瘦身如何再减少大小?,ffmpeg音视频开发实战5

android 程序员 移动开发

Android-Q-对-startActivity()-做了限制,怎么适配?,安卓开发自学教程

android 程序员 移动开发

Android-多渠道打包配置;你了解吗?,移动互联网app开发入门

android 程序员 移动开发

Android 获取子 View 的位置及坐标的方式(1),Android入门视频教程

android 程序员 移动开发

Android-app自动更新总结(已适配9-0),一个回答引发热烈讨论

android 程序员 移动开发

Android-Q来了!谷歌将在数小时内发布测试版(1),阿里大牛整理

android 程序员 移动开发

Android-Q来了!谷歌将在数小时内发布测试版,腾讯+华为+阿里面试真题分享

android 程序员 移动开发

Android 自定义 View 之 LeavesLoading,移动开发工程师考试

android 程序员 移动开发

Android---Fragment-的过去、现状与未来,android网络层框架设计实战

android 程序员 移动开发

Android---用力过猛!为了组件化改造学习十几家大厂的技术博客

android 程序员 移动开发

Android-ContentProvider实例详解,2021年您应该知道的技术之一

android 程序员 移动开发

Android 高频面试必问之Java基础,安卓framework开发

android 程序员 移动开发

Android 高工面试必考题(二),android开发艺术探索pdf百度云

android 程序员 移动开发

Android-10分区存储介绍及百度APP适配实践,三年经验月薪50k我是怎么做到的

android 程序员 移动开发

Android-GC原理探究(深度好文),PDF超过6000页,

android 程序员 移动开发

Android-Service-ANR-的监控机制,flutter文档

android 程序员 移动开发

Android-冷门知识点汇总:你知道哪些Android中的冷门知识?

android 程序员 移动开发

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