"会员' HttpClient'在另一个模块中声明,需要导入"在Mono.Cecil / Fody

时间:2016-06-23 22:44:49

标签: c# exception mono 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。我尝试了很多东西,这就是我所知道的:

  • 例如,ModuleDefinition没有System.UriSystem.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))加载它。

2 个答案:

答案 0 :(得分:0)

创建新的SELECT EMPNO, ENAME from EMPTABLE WHERE sal = (SELECT MAX(sal) from EMPTABLE where hiredate BETWEEN '01-JAN-81' and '31-DEC-81') AND hiredate BETWEEN '01-JAN-81' and '31-DEC-81' 只需要FieldDefinition而非TypeReference,因此无需拨打TypeDefinition。试试这个:

Resolve()

答案 1 :(得分:0)

出于某种原因,SystemSystem.Net.Http未被引用,即使我已将'em添加为引用。在我的(修改过的)代码中明确使用HttpClient一次强制引用存在,之后我能够Import