为什么typeof(HttpResponseMessage)为null?

时间:2018-07-18 13:14:43

标签: c# typeof httpresponsemessage

我们有自己的工具来创建Web api的文档。它读取///注释并从中创建文档。但是,我们有一个奇怪的问题:表达式typeof(HttpResponseMessage)奇怪地计算为null。为什么会这样?

只需澄清一下:当我们在运行时读取程序集并创建文档时,HttpResponseMessage中的MethodInfo.ReturnType中包含一些API方法。这一工作没有问题。但是,当我们尝试检查类型是否为HttpResponseMessage时,我们将执行if(methodInfo.ReturnType == typeof(HttpResponseMessage),如果总是计算为null,则此处为右侧。当我在Visual Studio调试器中运行它并将typeof(HttpResponseMessage)写入“监视”窗口时,它的计算结果也为null

(类型在System.Net.Http中定义。)

这是调试器的屏幕快照,显示这是真实的: enter image description here

sceenshot清楚地表明typeof在程序和Watch窗口中都返回null,但是parameterType变量实际上指向该类的类型对象。这是一个普通的Win32控制台应用程序。

1 个答案:

答案 0 :(得分:0)

看起来我在这里碰到了一个奇怪的情况。 typeof运算符在从System.Net.Http程序集中导入的类型上返回null,该类型在项目中被引用,但是该文件位于C:\ Program Files \ Reference Assemblys中,我认为它不用于在运行时搜索程序集。并将引用设置为CopyLocal = false。因此,问题似乎是由该类型在编译时可用而不是在运行时可用引起的。如果类型丢失并且无法在运行时加载,我会期望出现异常,但是哇,这个运算符只是默默地抛出空值。

明天我将测试是否可以通过更正此不良引用来解决此问题。