谢谢你给我时间。
背景
我正在尝试在 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()返回,就会抛出异常:Member 'System.Net.Http.HttpClient' is declared in another module and needs to be imported。
所以呢?
我无法导入HttpClient. 我已经尝试了很多事情,这就是我所知道的:
- 例如, ModuleDefinition 没有
System.Urior的定义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)).