我正在寻找Microsoft Windows中的并排程序集和隔离的应用程序解决方案。
文档说:
私有程序集是一个程序集 与应用程序一起部署并且是 可供专用 该申请。
和
私人集会必须设计为 与其他版本并行工作 系统上的装配。
但是,私有程序集的部署过程只是集成复制到应用程序的文件夹(或带有程序集名称的子文件夹)。因此,应用程序不能使用多个版本的私有程序集。因为如果您放置另一个版本的私有程序集 - 它将覆盖旧版本。
有人可以向我解释一下吗?
如果确实如此 - 那么这些程序集优于通常的重定向DLL的优点是什么?它们对我来说似乎很相似,而且似乎甚至没有在这里使用过。
答案 0 :(得分:3)
使用私有SxS程序集来部署dll实际上只是一种使事情更频繁失败的复杂方法。
但是有一些优点:
但是,您可以使用带有指定基本文件夹的Activation Context API在运行时创建自己的激活上下文,然后搜索私有SxS程序集。您可以使用此技术动态加载可选程序集或不同版本的程序集,以在必要时实现某种插件API。
要使用激活上下文API,您需要:
意识到这不能用于静态绑定资源,因为它们总是在OS加载程序生成的上下文中加载。
创建一些应用程序清单文件,用于描述您希望随应用程序一起加载的依赖程序集 - 外部或嵌入为RT_MANIFEST资源,资源ID为> 16。
使用清单所在位置的详细信息填充ACTCTX结构,并确保lpAssemblyDirectory指向包含特定版本的私有SxS程序集的目录。调用CreateActCtx以创建激活上下文对象。
当需要加载特定版本的dll时,使用ActivateActCtx激活相应的激活上下文,然后在dll的简单名称上调用LoadLibrary。在调用之后将其取消激活,加载dll后,不再需要激活上下文激活 - 直到&除非您再次调用需要搜索激活上下文的API函数 - 例如创建一个在dll中托管的类的窗口,或者创建一个免费注册的com对象。
系统将 - 在加载dll时 - 搜索提供的lpAssemblyDirectory以获取它可能具有的dll和任何依赖程序集。
答案 1 :(得分:1)
好吧,每个EXE都有自己的私有DLL。这里没有覆盖,你将每个EXE放在自己的安装目录中。它们可以通过设计具有不同版本的DLL,DLL Hell不存在。除此之外,这些DLL可能会触及文件系统或注册表的其他部分,并互相踩到脚趾。引用“必须设计为并排工作”。这很难实现。