在不加载程序集的情况下检查程序集的版本

本文关键字:程序集 检查程序 版本 检查 情况下 加载 | 更新日期: 2023-09-27 18:26:26

我有一个方法,可以检查程序集的版本,如果它过期了,就会覆盖它。要检测版本,我使用以下代码:

version = Type.GetType(typeName).Assembly.GetName().Version;

然而,如果我认为这个版本已经过时,当我尝试覆盖它时,我会得到以下错误

进程无法访问文件。。。因为它正被另一个进程使用

在我看来,反映程序集的行为导致它加载到程序中,因此它不能被重写。

我怎样才能选择

  1. 在不加载程序集的情况下检查版本
  2. 在重写程序集之前卸载它

在不加载程序集的情况下检查程序集的版本

您应该只重定向程序集版本。

以以下方式加载程序集的副本。

var assembly = Assembly.Load(File.ReadAllBytes("YourAssembly.dll"));

现在可以覆盖磁盘上的程序集。

考虑使用Mono.Cecil

  • http://www.mono-project.com/Cecil

它是一个优越的(好吧,在Roslyn之前)CIL汇编读写器。