"Тип или имя пространства имен" Маршрут "не может быть найден" с использованием "маршрутизации атрибутов"

Просто пытаюсь объединить код из одного рабочего проекта в другой. Проект "from" использует "маршрутизацию атрибутов", где вы вставляете директивы [Route(…)] в модули контроллера Web API, чтобы указать, какое HTTP-сообщение должно направлять на какую-либо сервисную процедуру.

Прекрасно работает в проекте "from" , но в проекте "to" я получаю ошибку сборки. "Тип или имя пространства имен" Маршрут "не удалось найти (вам не хватает директивы using или ссылки на сборку?)"

Я пробовал копировать по существу все инструкции using из проекта "from" в проект "to", но это не имеет никакого видимого эффекта. Ни одна из документации MS не предполагает, что требуется пакет NuGet (или даже оператор using). Оба проекта предположительно представляют собой ASP.NET MVC 4.

(И, да, я обновил WebApiConfig.cs с помощью инструкции config.MapHttpAttributeRoutes();.)

Любые идеи?

Ответ 1

Маршрутизация атрибутов является родной в ASP.NET MVC 5 или более поздней версии и ASP.NET Web API 2.

Однако существует проект который позволяет использовать маршрутизацию атрибутов в предыдущей версии ASP.NET MVC и Web API. Вы должны внимательно прочитать эту страницу.

Как вы можете видеть на связанной странице, этот проект доступен как пакет NuGet, поэтому его можно установить следующим образом:

  • Install-Package AttributeRouting (для MVC)
  • Install-Package AttributeRouting.WebApi (для веб-API)
  • Install-Package AttributeRouting.WebApi.Hosted (для самостоятельного веб-API)

Пожалуйста, имейте в виду, что пространства имен маршрутизации атрибутов различны для каждой версии и для MVC и Web API. Таким образом, вы должны просмотреть .dll, включенную установленным пакетом, чтобы узнать правильное пространство имен и соответственно изменить свой using. Например:

using AttributeRouting.Web.Http;

Ответ 2

Этот комментарий от Ведрана Мандича решил проблему для меня. Я переписываю его здесь, потому что я думаю, что это должен быть ответ (или, по крайней мере, ответ).

Я сделал пакет обновления Microsoft.AspNet.WebApi.WebHost -reinstall ' и это сработало. Забавно это происходит после получения последней версии на разные ПК от TFS. Я думаю, это происходит из-за пакетов nuget не работает должным образом с системой управления версиями

Ответ 3

В моем случае в проекте web api было два использования ссылок:

using System.Web.Http;
using System.Web.Mvc; 

Как только я удалил System.Web.Mvc, ошибка исчезла.

Ответ 4

Когда проекты распределяются между несколькими решениями, ссылка библиотек, загружаемых с помощью 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>