InvalidOperationException: операция недействительна из-за текущего состояния объекта с Mono.Cecil

Я пытаюсь создать собственную 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

Может ли кто-нибудь сказать мне, что я делаю неправильно?


person Sergiu Mindras    schedule 01.07.2013    source источник


Ответы (1)


Это было из-за версии DLL, которая не была последней. Я больше не получаю конкретное исключение. Однако я не могу записать ресурс в определенный поток. Мне приходилось писать во временный файл, затем читать из этого файла и записывать в целевую сборку. У кого-нибудь есть пример, который работает?

person Sergiu Mindras    schedule 08.07.2013