Как я могу заставить приложение веб-API запускаться снова после обновления до MVC 5 и Web API 2?

Я обновил приложение веб-API до версий funkelnagelneu, используя это руководство:

http://www.asp.net/mvc/tutorials/mvc-5/how-to-upgrade-an-aspnet-mvc-4-and-web-api-project-to-aspnet-mvc-5-and-web-api-2

Однако, пройдя все этапы (кажется, все это должно быть автоматизировано, во всяком случае), я попытался запустить его и получил: "Проект с типом типа вывода не может быть запущен напрямую"

Что в Братьях Сэма Хиллса Кофе здесь? Кто сказал, что это классная библиотека?

Итак, я открыл Project > Properties и поменял его (по какой-то причине он был помечен как "Class Library" - он либо был не вчера, а был и не работал) к типу вывода "Приложение Windows" ( "Консольное приложение" и "Библиотека классов" являются единственными другими опциями).

Теперь он не будет компилироваться, жалуясь: "Программа" c:\Platypus_Server_WebAPI\PlatypusServerWebAPI\PlatypusServerWebAPI\obj\Debug\PlatypusServerWebAPI.exe 'не содержит статического метода "Главная", подходящего для точки входа... "

Как я могу вернуть свое приложение для веб-API в соответствии с этим затруднительным положением?

UPDATE

Глядя в packages.config, две записи кажутся достойными подбородка:

<package id="Microsoft.AspNet.Providers" version="1.2" targetFramework="net40" />
<package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net40" />

Все остальные нацелены на net451. Это может быть проблема? Должен ли я удалить эти пакеты?

ОБНОВЛЕНИЕ 2

Я попытался удалить пакет Microsoft.Web.Infrastructure(его описание приводит меня к тому, что я не нуждаюсь в нем, а также он не имеет зависимостей) через диспетчер пакетов NuGet, но он говорит мне: "NuGet не удалось установите или удалите выбранный пакет в следующих проектах. [mine]"

ОБНОВЛЕНИЕ 3

Я снова повторил шаги и обнаружил, что пропустил один шаг. Мне пришлось изменить эту запись в приложении web.config. Файл:

<dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="1.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
</dependentAssembly>

(от "4.0.0.0" до "5.0.0.0" )

... но я все равно получаю тот же результат - он перестраивает/компилирует, но не запускается, а "Проект с типом вывода типа библиотеки классов не может быть запущен напрямую"

ОБНОВЛЕНИЕ 4

Размышляя о ошибке msg, что он не может напрямую открыть библиотеку классов, я подумал: "Конечно, вы не можете/не будете - это веб-приложение, а не проект. Поэтому я последовал предчувствию, закрыл проект и вновь открыл его как веб-сайт (вместо повторного открытия проекта).

Это привело меня дальше, по крайней мере; теперь я вижу YSOD:

Не удалось загрузить файл или сборку "System.Web.WebPages.Razor, Version = 3.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35" или одну из его зависимостей. Система не может найти указанный файл.

ОБНОВЛЕНИЕ 5

Примечание. Проект теперь (после его открытия как веб-сайт) с именем "localhost_48614"

И... больше нет папки "Ссылки"...?!?!?

Что касается этого YSOD, который я получаю, официальные инструкции (http://www.asp.net/mvc/tutorials/mvc-5/how-to-upgrade-an-aspnet-mvc-4-and-web-api-project-to-aspnet-mvc-5-and-web-api-2) сказали сделать это, и я цитирую:

"Обновите все элементы, содержащие" System.Web.WebPages.Razor "из версии" 2.0.0.0 "на
версия "3.0.0.0" ".

ОБНОВЛЕНИЕ 6

Когда я сейчас выбираю "Инструменты" > "Диспетчер пакетов библиотек" > "Управление пакетами NuGet для решения", я получаю: "Операция не удалась. Не удалось найти каталог решений. Убедитесь, что решение было сохранено".

Итак, я сохраняю его, и он сохраняет его с этим напуганным новым именем (C:\Users\clay\Documents\Visual Studio 2013\Projects\localhost_48614\localhost_48614.sln)

Я получаю желтую полосу просветления в верхней части диспетчера пакетов NuGet me, "Некоторые пакеты NuGet отсутствуют в этом решении. Нажмите, чтобы восстановить из своего пакетов ".

Я делаю (нажмите кнопку "Восстановить", то есть), и он загружает недостающие пакеты... Я получаю 30 пакетов.

Я пытаюсь снова запустить приложение/сайт, и... прежний YSOD становится ошибкой компиляции:

Метод инициализации запуска до начала запуска. Тип запуска System.Web.Mvc.PreApplicationStartCode генерирует исключение со следующим сообщением об ошибке: Не удалось загрузить файл или сборку "System.Web.WebPages.Razor, Version = 3.0.0.0, Культура = нейтральная, PublicKeyToken = 31bf3856ad364e35 'или одна из ее зависимостей. Система не может найти указанный файл.

Argghhhh!!! (и это даже не разговор-а-пиратский день).

ОБНОВЛЕНИЕ 7

Мне все еще интересно, почему Шалтай-Болтай упал и сломал свою корону (так сказать), но я, наконец, бросил полотенце и создал новый проект, копируя и вставляя код - и он отлично работает (VS 2013 и веб-API, с методами REST, вызванными из клиентского приложения VS 2008,.NET 3.5).

Ответ 1

На последнем шаге в руководстве по миграции вы удалили только описание проекта MVC4 Project Guid? У меня была такая же проблема, как и вы, и когда я повторил свои шаги, я понял, что удалил все три гида внутри моего файла .csproj. Я восстановил другие гиды внутри этого элемента, и решение теперь распознает его как приложение MVC и теперь работает нормально. Итак, строка теперь читает:

<ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>

Надеюсь, что поможет

Ответ 2

Недавно я столкнулся с этой проблемой, но это было простое исправление. У меня есть несколько проектов в моих решениях (включая несколько общих PCL), и когда я выгружал проект для изменения ProjectTypeGuids, он устанавливал PCL как значение по умолчанию. Щелкнув правой кнопкой мыши по моему проекту веб-сервиса и вернув его в проект запуска по умолчанию, он зафиксировал его и все работает.