2015-09-14 4 views
4

У меня есть новый .Net 4.5.2 (проверено, что это целевая среда). Приложение веб-API (в VS 2015). Я ссылаюсь System.Net.Http, и, как вы можете увидеть версии 4.0.0.0:HttpRequestMessage не найден, но System.Net.Http ссылается

properties of system.Net.Http reference

В моем Filter/Attribute Я пытаюсь ссылаться HttpRequestMessage, который находится в пространстве имен System.Net.Http (я имею правильно, используя в в верхней части моего файла), но я получаю сообщение, что

Тип «HttpRequestMessage» определен в сборке, на которую не ссылаются. Вы должны добавить ссылку на сборку 'System.Net.Http, Version = 4.0.0.0, культура = нейтральной, PublicKeyToken = b03f5f7f11d50a3a'

error when trying to reference HttpRequestMessage

И хотя я не могу ссылаться на этот класс, я может перейти к нему в Object Exploerer (я предполагаю, что это использует XML-файл с тем же именем рядом с .dll).

Я попытался (редактировать: как и обычный перезапуск VS и перестраивает и т.д.):

  1. Удаление и повторное добавление ссылки (с обеих рамок и Extensions - хотя я уверен, что это должен был быть версией Framework, я получал desparate)
  2. Установка из Nuget и ссылка на версию в моей локальной папке , которая, казалось, просто по умолчанию возвращалась к общесистемной версии.
  3. Переустановка все мои зависимости в NuGet вечера с: update-package -reinstall -ignoreDependencies
  4. Добавление сборки вручную в web.config Добавление сборки вручную в файл .csproj

[Edit: Решение:

ОК, я создал несколько новых проектов VS Web API (и решений), чтобы увидеть, могу ли я воспроизвести проблему. В конце я создал новую папку «Фильтры», создал новый класс Filter, скопировал содержимое моего исправленного оригинала, и было найдено имя HttpRequestMessage. То же самое происходит и в другом направлении (мой фильтр был первоначально создан в папке App_Code), и он все еще работал. Я думаю, что, возможно, была невидимая ссылка на старый System.Net.Http, который бросал гаечный ключ в произведениях, и хотя я, возможно, прокомментировал код, который его назвал, каким-то образом его запоминали. Это просто догадка. Но, в любом случае, его обработка до самых костяных костей и переход оттуда был окончательным подходом, который привел к решению.]

+2

Может ли это быть VS просто глупо? Попробуйте перезапустить вашу среду IDE. –

+1

Возможно, вам также потребуется предоставить переадресацию привязки для этой сборки в файле web.config/app.config для system.net.http. Не могли бы вы подтвердить, что он присутствует? – KnightFox

+1

Попробуйте установить локальную копию, а затем восстановить пакеты. Если это не помогло установить определенную версию равным true. – ivamax9

ответ

1

Мне также удалось решить это, перемещая мои пользовательские RouteConstraints из папки App_Code. Просто добавила новую папку в свой проект и скопировала их там.

+0

Да, с тех пор я [читал] (http://vishaljoshi.blogspot.co.uk/2009/07/appcode-folder-doesnt-work-with-web.html), что хранение чего-либо в папке App_Code является проблемой для чего угодно (в том числе веб-приложений), но веб-сайтов. – monty

0

Если вы собираетесь создавать веб-сайты, но теперь создаете веб-приложение, не добавляйте в него папку App_Code или любой код, так как каждый файл класса будет либо установлен как «Содержимое» (нажмите класс, посмотрите в панели «Свойства» в разделе «Действие сборки»), и поэтому он не будет подхвачен Intellisense в остальной части приложения или вы можете установить «Компиляция», но тогда у него есть свои проблемы во время выпуска: See Vishel Joshi's blog все об этом.

Смежные вопросы