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