使用Mono.Cecil

时间:2015-07-18 22:31:39

标签: c# .net .net-assembly mono.cecil

我正在尝试使用Mono.Cecil写入当前加载到AppDomain的程序集,并且我一直收到IO错误,说该文件正在使用中。我现在正在做的是使用AssemblyDefiniti.Create()创建一个程序集,进行我需要的任何修改,然后使用AssemblyDefinition.Write()在Assembly上编写。根据我对Mono.Cecil的理解,应该可以在现有的程序集上进行编写,但还有其他步骤吗?

2 个答案:

答案 0 :(得分:1)

对于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();
    }
}

答案 1 :(得分:0)

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

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