我有一个新的.Net 4.5.2(检查这是目标框架)Web API应用程序(在VS 2015中)。我引用了System.Net.Http
,您可以看到版本是4.0.0.0:
在我的过滤器/属性中,我试图引用位于HttpRequestMessage
命名空间中的System.Net.Http
(我在文件的顶部有正确的使用),但我收到消息
类型'HttpRequestMessage'在未引用的程序集中定义。您必须添加对程序集'System.Net.Http,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'
的引用
虽然我不能引用该类,但我可以在Object Exploerer中浏览它(我假设它使用.dll旁边的同名.xml文件)。
我试过(编辑:以及通常重启VS和重建等):
update-package -reinstall -ignoreDependencies
[编辑:解决方案:
好的,我创建了一些新的VS Web API项目(和解决方案),看看我是否可以重现这个问题。最后,我创建了一个新的“Filters”文件夹,在那里创建了一个新的Filter
类,复制了我的简化原文的内容,并且看到了HttpRequestMessage
。同样的事情反过来(我的过滤器最初是在App_Code文件夹中创建的)它仍在工作。我想也许有一个看不见的引用旧的System.Net.Http
正在投入扳手的工作,即使我可能已经注释掉了调用它的代码,不知何故它被记住了。这只是猜测。但无论如何,把它削减到最小的骨头并从那里开始是导致解决方案的最终方法。]
答案 0 :(得分:1)
我还设法通过将自定义RouteConstraints移出App_Code文件夹来解决此问题。刚刚在我的项目中添加了一个新文件夹并将其复制到那里。
答案 1 :(得分:0)
如果您来自创建网站,但现在正在创建Web应用程序,请不要将App_Code
文件夹或任何代码添加到其中,因为每个类文件都将设置为“内容”(单击该类,查看“构建操作”下的“属性”窗格),因此在应用程序的其余部分中不会被Intellisense选中,或者您可以设置为“编译”,但在发布时它有自己的问题所有关于它的时间:See Vishel Joshi's blog。
答案 2 :(得分:0)
我尝试了这个强烈建议的解决方案(在Web.Config上)
<system.web>
<compilation debug="true" targetFramework="4.5" />
<compilation debug="true" targetFramework="4.0">
<assemblies>
<add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</assemblies>
</compilation>
</system.web>
但不幸的是,这对我没用。最后,我找到了一个解决方案(这对我有用)
右键单击References
文件夹&gt; Add Reference...
展开窗口左侧的Assemblies,然后选择Framework。
滚动并选择程序集列表中的System.Net.Http
。
确保选中System.Net.Http
旁边的框,然后点击OK
。
重建项目。
答案 3 :(得分:0)
我遇到了同样的问题(这是我偶然发现的一个问题),有一件事我注意到似乎还没有人锁定。
我正在构建WebApi2应用程序,并添加了一个类库以将其转换为nunit测试库。我开始与System.Web.Http发生冲突。看来webapi2使用5.2.6.0,其他情况下会尝试将其默认设置为4.0.0.0。
确保您使用的System.Web.Http版本正确,并且还引用了System.Net.Http程序集。一旦两个程序集都被引用并在所有解决方案中运行相同的版本号,便解决了所有问题。 VS并不总是自己加载正确的版本。
答案 4 :(得分:0)
在我的情况下,由于愿意在App_Code
内部实际使用动态编译的文件,我不得不在Web.Config的编译节点中显式添加程序集:
<system.web>
<compilation targetFramework="4.7.2">
<assemblies>
<add assembly="System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</assemblies>
</compilation>
...
这解决了我的情况。当然,可以根据您的项目需求调整目标框架。