"Member 'HttpClient' is declared in another module and needs to be imported" 在 Mono.Cecil / 福迪

"Member 'HttpClient' is declared in another module and needs to be imported" in Mono.Cecil / Fody

谢谢你给我时间。

背景

我正在尝试在 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。我已经尝试了很多东西,以下是我所知道的:

有什么想法吗?

谢谢,
格雷格


编辑 1

事实证明,如果代码中未使用类型的引用(在本例中 System.Net.Http),则无法导入类型。
现在,我可以使用 TypeDefinition def = ModuleDefinition.GetType(typeof(HttpClient)).

加载它

创建一个新的 FieldDefinition 只需要 TypeReference 而不是 TypeDefinition,因此不需要调用 Resolve()。试试这个:

FieldDefinition field = 
    new FieldDefinition($"${GENERATED_CLIENT_PATH}",
    FieldAttributes.Private, 
    moduleDefn.Import(typeof(HttpClient));

出于某种原因,SystemSystem.Net.Http 没有被引用,即使我添加了它们作为引用。在我的(修改后的)代码中显式使用 HttpClient 一次强制引用存在,之后我能够 Import 它。