使用monocecil编写程序集

本文关键字:程序集 monocecil 使用 | 更新日期: 2023-09-27 18:03:27

我正在尝试编写一个程序集,该程序集目前使用Mono加载到AppDomain中。塞西尔和我一直得到一个IO错误,说文件正在使用中。我现在正在做的是使用assemblydefinition . create()创建程序集,进行任何我需要的修改,然后使用AssemblyDefinition.Write()编写程序集。据我对单核细胞增多症的了解。Cecil应该可以在现有的程序集上编写,但是还有其他步骤吗?

使用monocecil编写程序集

对于0.10.0,添加ReaderParameters有助于解决这个问题:

using (AssemblyDefinition a = AssemblyDefinition.ReadAssembly(file, new ReaderParameters { ReadWrite = true }))
{
    var assemblyFileVersionCtor = a.CustomAttributes.Where(attribute => attribute.AttributeType.FullName == typeof(AssemblyFileVersionAttribute).FullName)
        .FirstOrDefault();
    if (assemblyFileVersionCtor != null)
    {
        assemblyFileVersionCtor.ConstructorArguments[0] = new CustomAttributeArgument(a.MainModule.TypeSystem.String, versionToSet.ToString());
        a.Write();
    }
}

我还必须将ReaderParameters的InMemory属性设置为true。

var rp = new ReaderParameters();
rp.ReadingMode = ReadingMode.Immediate;
rp.ReadWrite = true;
rp.InMemory = true;