从程序集中获取所需的运行时版本

Posted

技术标签:

【中文标题】从程序集中获取所需的运行时版本【英文标题】:get required runtime version from assembly 【发布时间】:2014-03-02 01:16:13 【问题描述】:

我需要获取我的程序集所需的 CLR 版本,然后删除该程序集。这些中的每一个都是微不足道的,但是如果我想同时执行它们,我会遇到问题:要获取 ImageRuntimeVersion 属性的值,我需要加载程序集。这可以防止我删除该文件,因为它说该文件正在使用中。我试图将该文件加载到一个单独的应用程序域中,但失败得很惨(例如,即使我使用将 byte[] 作为参数的构造函数加载它也无法找到该文件的一些错误或另一个错误:SecurityException 说一些关于 RegistryPermission 的信息)。

【问题讨论】:

【参考方案1】:

您可以将程序集读入内存流并加载吗?它应该使您免于锁定原始程序集,但我从其他 cmets 看到这将导致任何链接的程序集锁定。

那么你要删除的程序集只是一个断开连接的文件,所以在你读入后处理掉它后,你应该可以删除它。

【讨论】:

+1。注意:如果您从不需要将相同/相似的程序集加载到同一个应用程序域中,这种方法很好,否则加载下一个程序集很可能不会选择正确的二进制文件。如果您需要加载具有相同全名的程序集,唯一真正的选择是将其加载到新的 AppDomain 中,并在获得必要信息后立即销毁该新 AppDomain。 这种方法似乎可行,但我需要检查程序集更改时的场景(是否会正确提取新版本)。 @AlexeiLevenkov - 我如何将程序集实际加载到新的 AppDomain 中? @TomaszGrobelny 诀窍是在新的 AppDomain 中运行加载代码。相关问题合理地涵盖了这一点,***.com/questions/1468151/… 似乎有适当的样本。

以上是关于从程序集中获取所需的运行时版本的主要内容,如果未能解决你的问题,请参考以下文章

Java EE 6 SDK 卸载“找不到所需的 Java(TM) 2 运行时环境版本”

所需的 JSON 文件具有运行程序之前的旧值

在使用 CodeSign 进行最终运行时“缺少所需的架构”

如何让 /bin/bash 在 Composer 中运行所需的 php 版本? [复制]

尝试从 Access 运行 Excel 以格式化导出的表,获取所需的对象错误

从 oraclebulkcopy 获取进度条的运行时