Как открыть старый проект MVC в Visual Studio 2012 или Visual Studio 2013?

152

У меня есть старый проект ASP.NET MVC 2, который я не хочу обновлять до MVC 3 или MVC 4. Я работаю на новой машине под управлением Windows 8, Visual Studio 2012 и Visual Studio 2013. Когда я пытаюсь открыть MVC 2 проекта в VS 2012 или VS 2013 я получаю ошибку:

Этот проект несовместим с текущей версией Visual Studio

Затем проект выгружается и отображается серым цветом в Solution Explorer. Я не хочу устанавливать еще одну копию Visual Studio. Как открыть старый проект MVC в новой версии Visual Studio?

ahsteele
источник
Почему вы задали этот вопрос, если знали?
Брайан Уайт
30
@BrianWhite Когда я столкнулся с этой проблемой сегодня утром, я сделал быстрый поиск в Google и ничего не нашел. Так как я знаком с тем, как работают файлы проекта VS, у меня было предположение относительно причины и потенциального решения. Как только я убедился, что решение сработало, я захотел поделиться этими знаниями. Основываясь на рекомендациях Джеффа, можно задавать вопросы и отвечать на них .
ahsteele
1
Спасибо, я этого не знал. Есть ряд вещей, которые я не опубликовал, потому что я не видел, чтобы кто-то искал это здесь.
Брайан Уайт
8
Спасибо, что опубликовали решение. Ответы на собственные вопросы, когда решение найдено, добавляют знания сообществу.
помарка

Ответы:

291

Открытие неподдерживаемого проекта MVC в Visual Studio 2012 или Visual Studio 2013 на самом деле довольно просто сделать за два шага. Фактически, как указывает комментарий bytebender , эти же шаги должны применяться и работать для проектов MVC 1. Однако я не проверял их и поэтому не могу гарантировать, что они действительно работают.

Предполагая, что вы этого еще не сделали, на первом этапе загрузите и установите MVC 1 , MVC 2 или MVC 3 (закройте Visual Studio перед началом установки).

После установки соответствующего варианта MVC проект все равно не будет загружаться в VS 2012. Это связано с тем, что проекты ASP.NET MVC являются подтипом проекта типа проекта веб-приложения. Это означает, что проект имеет дополнительные надстройки и функции, доступные для него при использовании в Visual Studio.

Как Visual Studio 2012, так и Visual Studio 2013 имеют обратную совместимость с ASP.NET MVC и другими типами проектов. К сожалению, установка старых битов MVC не изменила этого. Visual Studio 2012 совместима с разновидностями проекта ASP.NET MVC 3 и 4. Visual Studio 2013 совместим с MVC 4 и MVC 5.

Чтобы загрузить проект, вам нужно изменить файл проекта. Для этого щелкните правой кнопкой мыши на незагруженном проекте и выберите «Изменить». Который откроет файл проекта в виде текстового файла XML. Найдите ProjectTypeGuidsузел, который должен выглядеть примерно так:

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

Удалите соответствующий Гид проекта из списка:

  • ASP.NET MVC 1: {603c0e0b-db56-11dc-be95-000d561079b0}
  • ASP.NET MVC 2: {F85E285D-A4E0-4152-9332-AB1D724D3325} (показано в примере выше)
  • ASP.NET MVC 3: {E53F8FEA-EAE0-44A6-8774-FFD645390401}
  • ASP.NET MVC 4: {E3E379DF-F4C6-4180-9B81-6769533ABE47}

С удаленным соответствующим GUID ProjectTypeGuidsдолжен выглядеть примерно так:

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

Сохраните файл и закройте редактор файлов проекта Visual Studio. Щелкните правой кнопкой мыши по проекту и выберите перезагрузить. Если проект не перезагрузится, закройте и снова откройте Visual Studio. Теперь вы должны иметь возможность работать со старым проектом ASP.NET MVC в новой версии Visual Studio.

Важно отметить, что после этих изменений Visual Studio не знает, что это проект ASP.NET MVC; поэтому специфичные для проекта функции, такие как «Добавить контроллер, просмотр и т. д.» не будет присутствовать в меню.

ahsteele
источник
11
Это работает и для MVC 1. Я не смог перезагрузить после редактирования файла проекта. Мне пришлось закрыть и снова открыть визуальную студию, и тогда она смогла загрузить проект MVC 1. Спасибо! +1
bytebender
1
превосходно! работает для меня с одним небольшим дополнением ... в моем .cspproj у меня был дополнительный projectTypeGuid: {F85E285D-A4E0-4152-9332-AB1D724D3325}; который нужно было удалить.
Кевин выиграл
2
@JookyDFW проблема с утилитой миграции в том, что это утилита миграции . По причинам, не перечисленным в вопросе для этого конкретного проекта, я не смог обновить MVC 2. Несмотря на то, что проект не мог быть обновлен, мне все равно нужно было поработать над ним. Изменение файла проекта, как указано выше, является лучшим (единственным?) Способом работы с проектом MVC 2 в VS 2012.
ahsteele
3
@RyanShripat это не было моим опытом вообще. Более старые версии ASP.NET MVC должны быть установлены, но VS 2010 не влияет на вышеуказанное.
ahsteele
2
@Nanu спасибо за комментарий, чтобы было понятно, что я имел в виду: « Важно отметить, что после этих изменений Visual Studio не осознает, что это проект ASP.NET MVC; поэтому специфичные для проекта функции такие как «Добавить контроллер, просмотр и т. д.» не будут присутствовать в меню. »
ahsteele
4

Я использовал подход @ ahsteele (спасибо и 2x + 1s!), Но у меня была еще одна ошибка: -

.csproj: ошибка: операция не может быть завершена. Неверная строка класса

Я не могу найти никаких ссылок на истинную причину этого, но я смог заставить VS2012RTM успешно загрузить проект, изменив <ProjectGuid>. (Понятия не имею, как это произошло - его часть большого решения и VS08, VS10, VS11 Beta и VS2012RC обновили .csprojи .slnсо временем.

Рубен Бартелинк
источник
1

В VS2017 решение состоит в том, чтобы просто сделать это <ProjectTypeGuids></ProjectTypeGuids>так.

Между леди и джентльменами не должно быть пробелов, иначе это потратит 48 часов вашего времени.

С уважением

WickStargazer
источник