2025上半年,最新 AI实践都在这!20+ 应用案例,任听一场议题就值回票价 了解详情
写点什么

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

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

关注

评论

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

ROS常用指令

Geek_7ubdnf

ROS

【Dubbo3终极特性】「云原生三中心架构」带你探索Dubbo3体系下的配置中心和元数据中心、注册中心的原理及开发实战(上)

码界西柚

云原生 注册中心 配置中心 Dubbo3 元数据中心

千万学生管理系统存储架构设计

陈天境

架构实战4-千万学生试卷存储方案

架构实战营 「架构实战营」

个税通识

清风明月

PyTorch指定GPU进行训练

Geek_7ubdnf

Python

架构作业4-千万级学生管理系统的考试试卷存储方案

梁山伯

ETL 引擎 engine 适配 elasticsearch

weigeonlyyou

oracle Prometheus ETL Elastic Search InfluxDB Cluster

模块四:存储架构模式

程序员小张

如何理解高性能服务器的高性能、高并发?

GPU算力

线程 线程池 协程

架构实战营-电商秒杀系统设计

Geek_b35d92

架构 秒杀 电商

「Go框架」抽丝剥茧:探究iris路由的底层存储结构

Go学堂

golang 开源 程序员 个人成长

模块四作业

程序员小张

「架构实战营」

什么样的故障让阿里云换了总裁?

慕枫技术笔记

云计算 后端

ROS教程(Xavier)

Geek_7ubdnf

ROS

醉爱江南,2023走进双山香山

科技大数据

剖析容器网络Flannel VXLAN模式工作原理

flannel #Kubernetes# #k8s

AIGC神器CLIP:技术详解及应用示例

Baihai IDP

人工智能 AI AIGC CLIP

Studio One2023免费中文版安装下载

茶色酒

Studio One 5 Studio One2023

FL Studio23最新永久版水果软件下载教程

茶色酒

FL Studio2023

电商秒杀系统架构设计

小虎

架构训练营

数据分析设计模式

agnostic

数据分析模式

2023-01-15:销售员。编写一个SQL查询,报告没有任何与名为 “RED” 的公司相关的订单的所有销售人员的姓名。以 任意顺序 返回结果表。 DROP TABLE IF EXISTS `com

福大大架构师每日一题

数据库 sql 福大大

关于Linux内存回收的几个问题

SkyFire

内存 Linux Kenel

基于幂等表思想的幂等实践

小小怪下士

Java 程序员

MySql 应用程序常见问题

Andy

【面试题】Java 2个(多个)大整数相加如何实现

石臻臻的杂货铺

Java’

架构实战营第 10 期 - 模块四作业:设计千万级学生管理系统的考试试卷存储方案

kaizen

「架构实战营」

极客时间架构训练营模块四作业

现在不学习马上变垃圾

架构训练营10期

Apache Flink 社区 2022 年度报告:Evolution, Diversity, Connection

Apache Flink

大数据 flink 实时计算

在别墅大宅中打造全屋智能,总共需要几步?

脑极体

全屋智能

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