私はこの方法を持っています:
public int Test()
{
ExternalClass cls = new ExternalClass();
return cls.ExternalMethod();
}
次のように、タイプをパラメーターとして渡し、オブジェクトの直接作成を削除できるように、ILインジェクションを使用して変更する必要があります。
public int Test(ExternalClass cls)
{
return cls.ExternalMethod();
}
<>。Parameters.Add( _ ___ )を使用して追加のパラメーターを追加し、新しいアセンブリを生成することができます。
問題は、新しいオブジェクトを作成するための命令を削除できないことです。以下は、それを削除するために使用した行です。
ILProcessor ilProcessor = <<MethodDefinition>>.Body.GetILProcessor();
ilProcessor.Remove(<<newobj instruction>>);
以下のように変更されたアセンブリメソッドを呼び出そうとすると、「共通言語ランタイムが無効なプログラムを検出しました」というエラーがスローされます。
ExternalClass ext = new ExternalClass();
int i = prg1.Test(ext);
私もメモリ割り当て関連のものを処理する必要があるかもしれないことを知っています。誰かがここで実装する追加の手順を提供できれば幸いです。