释放 Assembly.LoadFrom 文件句柄

Posted

技术标签:

【中文标题】释放 Assembly.LoadFrom 文件句柄【英文标题】:release Assembly.LoadFrom file handle 【发布时间】:2010-07-19 13:02:05 【问题描述】:

我正在尝试使用以下代码在 C# 中获取 exe 的汇编版本

Assembly asm = Assembly.LoadFrom(address);
return asm.GetName().Version;

它运行良好,但如果我在使用此功能后尝试删除 exe,它会显示“拒绝访问”,因为该 exe 正在被另一个进程使用!

是否有任何 Dispose 调用或释放文件句柄或任何其他解决方案的东西?

【问题讨论】:

How to unload an assembly from the primary AppDomain的可能重复 【参考方案1】:

除了卸载应用程序域之外,没有其他方法可以卸载程序集。见How to: Load and Unload Assemblies:

没有办法卸载 无需卸载的单独组装 所有的应用程序域 包含它。使用卸载方法从 AppDomain 卸载应用程序 域。有关详细信息,请参阅 卸载应用程序域。

如果您只想获取文件的版本,请尝试使用FileVersionInfo.GetVersionInfo。

【讨论】:

【参考方案2】:

这里已经解决了这个问题

How to unload an assembly from the primary appdomain

【讨论】:

以上是关于释放 Assembly.LoadFrom 文件句柄的主要内容,如果未能解决你的问题,请参考以下文章

如果在 Windows 服务 .net 可执行文件中调用 .NET Assembly.Load/LoadFrom 会失败

ASP.NET:CreateDomain(...).CreateInstanceAndUnwrap(...) 或 Assembly.LoadFrom(...).GetExportedTypes() 抛

Assembly.LoadFrom 在带有 MFC 的 cpp/CLI DLL 上失败,包括

Assembly.LoadFrom加载程序集类型转换失败解决方法

为C# as 类型转换及Assembly.LoadFrom埋坑!

元数据与反射