“Route”类型或命名空间名称未找到,使用“属性路由”。

18
尝试将一些代码从一个工作项目拼接到另一个项目中。 "From" 项目使用 "属性路由(attribute routing)",在Web API控制器模块中嵌入 [Route(...)] 指令以指示应将哪个HTTP消息路由到哪个服务例程。
在 "From" 项目中运行良好,但在 "To" 项目中出现构建错误 "无法找到 'Route' 类型或命名空间名称(您是否缺少 using 指令或程序集引用?)"
我已尝试将 "From" 项目的几乎所有using语句复制到 "To" 项目中,但似乎没有任何影响。 Microsoft 的文档没有建议需要 NuGet 包(或甚至使用语句)。两个项目都是 ASP.NET MVC 4。
(是的,我已经更新了 WebApiConfig.cs 文件,包含 config.MapHttpAttributeRoutes() 语句。)
有任何想法吗?

2
我记得这是一个Web API 2的功能,我认为它与MVC4项目“捆绑”在一起...不对,我想我有点混淆了。不......我有点眉目了,试试安装Install-Package Microsoft.AspNet.WebApi.WebHost。 - brumScouse
2
在VS项目中有太多版本浮动,我不知道该检查哪个。这两个项目都导入了MVC 4 NuGet包。除此之外我不知道了。 - Hot Licks
1
好的,我看到“from”导入了Web API 2包,而“to”没有导入任何Web API。我会尝试升级来解决它,或者看看是否会导致我们所知道的宇宙的终结。 - Hot Licks
1
@brumScouse - 安装了“Web API 2.1 Web Host”,与路由相关的4个错误消失了。当然,又出现了两个新的错误。谢谢!(我想) - Hot Licks
7
谢谢@brumScouse,我执行了'Update-Package Microsoft.AspNet.WebApi.WebHost -reinstall'命令,问题已解决。有趣的是,在从TFS获取最新版本后,在不同的电脑上出现了这种情况。我猜这可能是由于NuGet包与版本控制系统不兼容导致的。 - Vedran Mandić
显示剩余4条评论
4个回答

32

这是来自Vedran Mandić的评论,解决了我的问题。我在此转发它,因为我认为它应该是答案(或者至少是一个答案)。

我执行了 'Update-Package Microsoft.AspNet.WebApi.WebHost -reinstall' 命令,然后问题得到了解决。有趣的是,在不同的PC上从TFS获取最新版本之后会出现这种情况。我想这可能是由于nuget包与版本控制系统无法正常工作所导致的。


1
这太棒了。我在使用TFS和nuget时也遇到了同样的问题。 - Leandro Bardelli
1
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Ads
奇怪的是 - 我将VS2019从16.7.5更新到了16.8.2(最新版本),并且必须这样做。结果非常顺利。 - Coyttl

25

Attribute Routing在ASP.NET MVC 5及更高版本以及ASP.NET Web API 2中是原生的。

对于早期版本,您可以使用来自AttributeRouting项目的一个包,在早期版本的ASP.NET MVC和Web API中使用属性路由。可用的NuGet软件包如下:

  • Install-Package AttributeRouting(适用于MVC)
  • Install-Package AttributeRouting.WebApi(适用于Web API)
  • Install-Package AttributeRouting.WebApi.Hosted(适用于自托管的Web API)

请注意,每个版本的属性路由命名空间都不同,因此您必须查看项目源代码或浏览所安装包中包含的.dll文件,以找到正确的命名空间,并相应地更改您的using语句。例如:

using AttributeRouting.Web.Http;

不幸的是,安装AttributeRouting包并不能让这些消息消失。(我在模块中有一个“using System.Web.Http.Routing;”) - Hot Licks
那很合理。命名空间是不同的。你必须确保正在使用哪个版本的Web API。要使用的属性取决于版本(MVC和Web API)以及它是Web API、自托管Web API还是MVC。 - JotaBe
链接失效了,所以我提供 GH 链接:https://github.com/mccalltd/AttributeRouting - Dominik S

5
在我的情况下,在Web API项目中有两个引用:
using System.Web.Http;
using System.Web.Mvc; 

一旦我移除了System.Web.Mvc,错误就不再出现。

仍然出现错误。虽然 [RoutePrefix("xxx")] 可以使用,但 [Route("xxx")] 仍然不可用。 - shaair
我也是。直到我遵循了ClearCloud8(上面)的建议。 - Thom Parkin

0
当多个解决方案共享项目时,使用Nuget下载的库的引用必须在与解决方案相关的路径下手动配置在.csproj文件中。
例如,log4net应该配置为:
<Reference Include="log4net, Version=1.2.15.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
   <HintPath>$(SolutionDir)\packages\log4net.2.0.5\lib\net45-full\log4net.dll</HintPath>
   <Private>True</Private>
</Reference>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接