找不到HttpRequestMessage,但引用了System.Net.Http

mon*_*nty 7 .net c# visual-studio-2015

我有一个新的.Net 4.5.2(检查这是目标框架)Web API应用程序(在VS 2015中).我已经引用了System.Net.Http,你可以看到版本是4.0.0.0:

system.Net.Http参考的属性

在我的过滤器/属性中,我试图引用命名空间中的HttpRequestMessage哪个System.Net.Http(我在文件的顶部有正确的使用),但我得到的消息是

类型'HttpRequestMessage'在未引用的程序集中定义.您必须添加对程序集'System.Net.Http,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'的引用

尝试引用HttpRequestMessage时出错

虽然我不能引用该类,但我可以在Object Exploerer中浏览它(我假设它使用.dll旁边的同名.xml文件).

我试过(编辑:以及通常重启VS和重建等):

  1. 删除并重新添加引用(来自Framework和Extensions - 虽然我确定它的意思是框架版本,但我变得绝望)
  2. 从Nuget安装并在我的本地包文件夹中引用该版本,该文件夹似乎只是默认返回到系统范围的版本.
  3. 使用以下命令重新安装Nuget PM中的所有依赖项: update-package -reinstall -ignoreDependencies
  4. 手动将程序集添加到web.config手动将程序集添加到.csproj文件

[编辑:解决方案:

好的,我创建了一些新的VS Web API项目(和解决方案),看看我是否可以重现这个问题.最后,我创建了一个新的"Filters"文件夹,Filter在那里创建了一个新类,复制了我的简化原文的内容,并且HttpRequestMessage被认可了.同样的事情反过来(我的过滤器最初是在App_Code文件夹中创建的)它仍在工作.我想也许有一个看不见的人提到了一个System.Net.Http在工作中投掷扳手的老人,尽管我可能已经注释掉了调用它的代码,不知何故它被记住了.这只是猜测.但无论如何,把它削减到最近的骨头并从那里开始是导致解决方案的最终方法.

mon*_*nty 0

如果您刚刚创建网站,但现在正在创建 Web 应用程序,请不要App_Code向其中添加文件夹或任何代码,因为每个类文件都将设置为“内容”(单击类,查看“构建操作”下的属性窗格),因此在应用程序的其余部分中不会被 Intellisense 拾取,或者您可以设置为“编译”,但在发布时有其自身的问题:请参阅Vishel Joshi 的博客了解所有相关信息它。