我正在尝试基于现有的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
有人可以告诉我我做错了吗?
答案 0 :(得分:0)
这是因为DLL的版本,这不是最新版本。我再也没有得到具体的例外。但是,我似乎无法将资源写入某个流。我不得不写一个临时文件,然后从该文件中读取并写入目标程序集。 有没有人有一个有效的例子?