お時間をいただきありがとうございます。
バックグラウンド
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))
。