1

我正在尝试基于现有的卫星程序集生成自定义 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

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

4

1 回答 1

0

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

于 2013-07-08T14:34:48.977 回答