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 に答える