使用Mono.Cecil在程序集上编写

问题描述 投票:2回答:2

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

c# .net .net-assembly mono.cecil
2个回答
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();
    }
}

0
投票

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

var rp = new ReaderParameters();
rp.ReadingMode = ReadingMode.Immediate;
rp.ReadWrite = true;
rp.InMemory = true;
© www.soinside.com 2019 - 2024. All rights reserved.