и спасибо, что уделили мне свое время.
Фон
Я пытаюсь создать новый HttpClient в Mono.Cecil и добавить его в поле. Вот мой код:
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
. Я пробовал много вещей, и вот что я знаю:
- Например, ModuleDefinition не имеет определения для
System.Uri
или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()
does not change anything ;new TypeReference(namespace, name, ModuleDefinition, httpAssembly.Name)
тоже не работает;- Также не вызывает
def
напрямую.
Есть идеи?
Спасибо,
Грег.
Изменить 1
Оказывается, вы не можете импортировать тип, если его ссылка (в данном случае System.Net.Http
) не используется в коде.
Теперь я могу загрузить его, используя TypeDefinition def = ModuleDefinition.GetType(typeof(HttpClient))
.
ModuleDefinition.Import(...)
(все перегрузки) помечен как устаревший, заменен наImportReference(...)
. - person Mr Anderson   schedule 25.06.2016Import
не помечен как устаревший, хотя я видел сообщение в блоге об этом. Вы также получили его из Nuget или скомпилировали? - person Greg   schedule 25.06.2016