谢谢你给我你的时间。
我试图在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
或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
。有什么想法吗?
谢谢你,
格雷格。
如果在代码中未使用其引用(在这种情况下为System.Net.Http
),则无法导入类型。
现在,我可以使用TypeDefinition def = ModuleDefinition.GetType(typeof(HttpClient))
加载它。
答案 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)
出于某种原因,System
和System.Net.Http
未被引用,即使我已将'em添加为引用。在我的(修改过的)代码中明确使用HttpClient
一次强制引用存在,之后我能够Import
。