InvalidOperationException:由于具有Mono.Cecil的对象的当前状态,操作无效

时间:2013-07-01 10:33:54

标签: invalidoperationexception mono.cecil

我正在尝试基于现有的sattelite程序集生成自定义DLL。 我希望新的DLL包含我选择的一些资源。

以下是我的代码:

private void GenerateTargetAssembly()
{
    var sourceDll = @"d:\input.dll";
    var targetDll = @"d:\output.dll";

    AssemblyDefinition ad = AssemblyDefinition.ReadAssembly(sourceDll);
    ad.MainModule.Resources.Clear();

    Stream stream = new MemoryStream();            
    ResourceWriter rw = new ResourceWriter(stream);
    rw.AddResource("test", "val");
    rw.AddResource("test1","val1");
    rw.Generate();

    EmbeddedResource er = new EmbeddedResource("resName", 
                            ManifestResourceAttributes.Public, stream);

    ad.MainModule.Resources.Add(er);
    ad.Write(targetDll);
}

但是,在 ad.Write(@“d:\ test.dll”)行中,由于对象的当前状态,我得到操作无效错误。异常类型: InvalidOperationException

有人可以告诉我我做错了吗?

1 个答案:

答案 0 :(得分:0)

这是因为DLL的版本,这不是最新版本。我再也没有得到具体的例外。但是,我似乎无法将资源写入某个流。我不得不写一个临时文件,然后从该文件中读取并写入目标程序集。 有没有人有一个有效的例子?