0

お時間をいただきありがとうございます。

バックグラウンド

Mono.Cecil で新しい HttpClient を作成し、それをフィールドに追加しようとしています。これが私のコードです:

TypeDefinition HttpClientDef = ModuleDefinition.GetType(typeof(HttpClient)).Resolve();
TypeDefinition def = GetSomeTypeDefinitionFromModule();

FieldDefinition field = new FieldDefinition($"${GENERATED_CLIENT_PATH}", FieldAttributes.Private, HttpClientDef);
def.Fields.Add(field);

ここでは問題ありませんが、一度void Execute()戻ると、例外がスローされます:メンバー 'System.Net.Http.HttpClient' は別のモジュールで宣言されており、インポートする必要があります

だから何?

インポートできませんHttpClient。私は多くのことを試しましたが、ここに私が知っていることがあります:

  • System.Uriたとえば、 ModuleDefinition にはまたはの定義がありませんSystem.Net.Http.HttpClient
  • ただし、次のようにして参照を取得できますHttpClient

    AssemblyDefinition httpAssembly = AssemblyResolver.Resolve("System.Net.Http");
    TypeDefinition HttpClientDef = httpAssembly.MainModule.GetType(typeof(HttpClient)); // fyi, HttpClient is also in httpAssembly.GetTypes().
    
  • 有効なTypeDefinitionを取得したら、それをどうするかわかりません。

    • ModuleDefinition.Import(def).Resolve()何も変更しません。
    • new TypeReference(namespace, name, ModuleDefinition, httpAssembly.Name)どちらも機能しません。
    • def直接呼び出すこともありません。

何か案が?

ありがとう、
グレッグ。


編集 1

型の参照 (この場合は ) がコードで使用されていない場合、その型をインポートできないことがわかりSystem.Net.Httpます。
これで、 を使用してロードできますTypeDefinition def = ModuleDefinition.GetType(typeof(HttpClient))

4

2 に答える 2

0

new の作成にはnotFieldDefinitionのみが必要なので、 を呼び出す必要はありません。これを試して:TypeReferenceTypeDefinitionResolve()

FieldDefinition field = 
    new FieldDefinition($"${GENERATED_CLIENT_PATH}",
    FieldAttributes.Private, 
    moduleDefn.Import(typeof(HttpClient));
于 2016-06-25T06:13:33.450 に答える