Преобразование .Net Core в .Net Framework

У меня есть веб-проект проекта .Net Core, и по разным причинам я хочу преобразовать его в проект .Net Framework.

Есть ли простой способ сделать это, или мне нужно начинать заново и импортировать код из предыдущих проектов?


person Richard Watts    schedule 06.03.2017    source источник
comment
Не существует автоматического способа сделать это, и я серьезно сомневаюсь, что когда-либо будет.   -  person DavidG    schedule 06.03.2017
comment
возможно, эта ссылка может вам помочь: блоги. msdn.microsoft.com/dotnet/2016/02/10/porting-to-net-core   -  person raBinn    schedule 06.03.2017
comment
@raBinn Это не то, о чем просит OP.   -  person DavidG    schedule 06.03.2017
comment
Хорошо, что было бы наилучшим путем вперед. Если мне нужен новый проект, или я могу заменить файлы проекта и основные ссылки asp.net ссылками asp.net   -  person Richard Watts    schedule 06.03.2017
comment
Начните новый проект и начните копировать код. Практически все по-другому, так что вам гораздо лучше просто пойти свежим.   -  person DavidG    schedule 06.03.2017
comment
Вы хотите вернуться к ASP.NET MVC 5 или хотите использовать полную платформу .NET Framework?   -  person Marcin Zablocki    schedule 06.03.2017
comment
В вашем вопросе указано, что .NET Core - .NET Framework. Это возможно с целевыми прозвищами, изменив netcoreapp1.0 на net462, net451 или что-то подобное. С ASP.NET Core по ASP.NET MVC 5 не так-то просто. Я сделал это для надстройки SharePoint и в итоге скопировал весь код в новый проект, ориентированный на ASP.NET MVC 5.   -  person koelkastfilosoof    schedule 06.03.2017
comment
Я уже нацелен на net451, и мне нужно будет перейти с ASP.NET Core на ASP.NET MVC 5. У меня есть большое приложение с довольно большим количеством зависимостей от библиотек DLL .Net Framework. Это вызвало некоторую боль. Однако повторный запуск - это также много работы, поэтому я думаю, что мне нужно дождаться VS 2017, чтобы увидеть, может ли обновление решить мои проблемы.   -  person Richard Watts    schedule 06.03.2017
comment
ASP.NET Core - ›ASP.NET MVC 5 всегда будет болезненным, потому что многие шаблоны были изменены в процессе перезаписи Core. Я бы рекомендовал начать новый проект и скопировать как можно больше кода.   -  person Nate Barbettini    schedule 07.03.2017
comment
Какие причины заставили вас это сделать !? Не могли бы вы мне сказать, потому что я хочу сделать то же самое и боюсь.   -  person Mohsen    schedule 21.08.2017


Ответы (8)


Я загрузил основной проект в сообщество VS 2017 RC и открыл * .csproj в текстовом редакторе.

Просто удалите тег

<RuntimeFrameworkVersion>

и заменить

<TargetFramework>netcoreapp1.1</TargetFramework>

to

<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>

А ведь в свойствах проекта установить любой другой фреймворк и сбросить обратно (перезагрузить и восстановить VS файл * .csproj).

person Alexander    schedule 10.05.2017
comment
В моем файле csproj не было тега ‹RutimeFrameworkVersion›, но я выполнил остальные инструкции, и это все еще работало для моего проекта. - person Nick Painter; 12.07.2017
comment
У меня это совсем не работает. Что вы вообще имеете в виду под ремонтом? - person Ms01; 31.08.2017
comment
@ MarkusStenqvist - при запуске VS увидеть новую запись в файле * .csproj и создать внутри правильную структуру - person Alexander; 31.08.2017
comment
Помните - вы должны закрыть VS - отредактировать файл * .csproj и только после запуска VS - person Alexander; 31.08.2017
comment
@Alexander нет необходимости закрывать VS, вы можете просто выгрузить проект и щелкнуть проект правой кнопкой мыши, чтобы отредактировать файл .csproj непосредственно в VS, а затем загрузить его снова - person Zaak; 02.09.2017
comment
Это решение подобрало меня достаточно близко, но у меня были некоторые ошибки при построении, связанные с предполагаемыми фреймворками. Это дало мне то, что мне было нужно в графическом интерфейсе, чтобы действительно иметь возможность выбирать фреймворк. Фактический вывод строки был ‹TargetFramework› net461 ‹/TargetFramework› в Visual Studio после того, как я закончил. - person Brandon Barkley; 12.09.2017
comment
Это не сработало для меня, и мне было трудно его отменить. Читатели, я предлагаю сначала сделать резервную копию ваших файлов .csproj. - person person27; 01.12.2017
comment
Я сделал это, и после этого изменения целевая структура в свойствах пуста. Приводит ли это к каким-либо отрицательным последствиям? Я что-то упускаю? - person K.Oleksiak; 14.08.2019
comment
@ K.Oleksiak - это странно, обычно после редактирования и запуска VS заставляет все работать сам. Вы начали VS jet? - person Alexander; 15.08.2019
comment
@ K.Oleksiak - и конечно помните об этом github.com/dotnet/standard/issues/514 - person Alexander; 15.08.2019

Это сработало для меня в VS2017:

Начните с основного шаблона веб-проекта .net.

Отредактируйте * .csproj, чтобы он выглядел так:

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>net472</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore" Version="2.1.3" />
    <PackageReference Include="Microsoft.AspNetCore.CookiePolicy" Version="2.1.2" />
    <PackageReference Include="Microsoft.AspNetCore.Http.Abstractions" Version="2.1.1" />
    <PackageReference Include="Microsoft.AspNetCore.HttpsPolicy" Version="2.1.1" />
    <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.1.2" />
    <PackageReference Include="Microsoft.AspNetCore.Mvc.Core" Version="2.1.2" />
    <PackageReference Include="Microsoft.AspNetCore.Mvc.RazorPages" Version="2.1.2" />
    <PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="2.1.1" />
  </ItemGroup>

</Project>

Сохрани и закрой.

Попробуйте запустить проект.

PackReferences - это просто файлы NuGet, и вы можете добавить их через графический интерфейс, если версии отличаются от приведенных выше.

person Greg Gum    schedule 19.09.2018
comment
Это работало отлично, ‹TargetFrameworkVersion› v4.6.1 ‹/TargetFrameworkVersion› - нет. Не знаю почему - person ghostbust555; 06.09.2019

Здесь есть много похожих ответов, но я не видел того, что было именно тем, чем я закончил, поэтому я хотел бы оставить это здесь на случай, если кто-то другой окажется в том же месте.

Чтобы быть ясным, мой проект был консольной программой. Итак, если вы пытаетесь использовать этот ответ для чего-то другого, ваш опыт может отличаться.

В вашем .csproj файле внутри тега <PropertyGroup></PropertyGroup> измените <TargetFramework>, чтобы отразить следующее:

<TargetFramework>net461</TargetFramework>

В этом примере я использовал v4.6.1. Могу только предположить, что вы вставите свою версию за словом «net», без точек. Удачи!

person Joshua Schlichting    schedule 17.04.2019
comment
Я разрабатываю в VB.Net на VisualStudio 2019, и я успешно использую ту же технику в файле vbproj. Я изменил ТОЛЬКО '‹TargetFramework› netcoreapp3.1 ‹/TargetFramework›' на ‹TargetFramework› net472 ‹/TargetFramework› - person schlebe; 13.06.2020

Ни один из ответов здесь не помог мне. В .Net Core 2 файл project.json больше не существует. Однако я решил эту проблему, выполнив следующие действия.

1) Я удалил все пакеты nuget из моего существующего проекта.

2) Я создал отдельный проект веб-приложения .net core, ориентированный на .net 4.61. Это должно было получить пакеты nuget по умолчанию.

3) Я отредактировал файл .csproj временного проекта, скопировал все узлы PackageReference внутри ItemGroup и вставил их в файл .csproj моих существующих проектов.

4) Отредактировал узел TargetFramework (внутри PropertyGroup) с «netstandard2» на «net461».

Мне нужно было отследить и разрешить несколько изменений пакетов, но в остальном я смог запустить.

person Brandon Ahearn    schedule 11.12.2017
comment
Теперь, в 2017 году, в моем случае я поставил net471 - person Tony; 11.12.2017
comment
@ Тони хорошее место. Сейчас у меня 472. Но на самом деле это было несущественно, потому что, как только вы внесете изменение, вы сможете редактировать его через свойства проекта в VS. - person Colm Bhandal; 08.04.2019

Для этого вам нужно сделать несколько шагов.

  1. Сначала щелкните правой кнопкой мыши файл .csproj и добавьте следующее

   <TargetFrameworks>netstandard2.0;netcoreapp2.0;net35;</TargetFrameworks>
        <RuntimeIdentifiers>win7-x86;win7-x64</RuntimeIdentifiers> <EnableDefaultCompileItems>false</EnableDefaultCompileItems>

  1. После внесения этих изменений перезагрузите проект и соберите его.
  2. Это создаст файлы .dll и пакет Nuget для этой сборки в папке Debug / Release проекта.
  3. Добавьте эти .dll в nuget и получите доступ к этим проектам из nuget.

Попробуйте описанные выше шаги. Это должно сработать.

person Sai Kiran    schedule 09.02.2018

В моей версии Visual Studio 2017 (15.6.2) после «Выгрузки проекта», щелкнув правой кнопкой мыши и выбрав «Изменить <your project file>», мне пришлось:

  1. Добавьте узел:

    <TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>

  2. Удаляем узлы:

    <TargetPlatformIdentifier>UAP</TargetPlatformIdentifier>

    <TargetPlatformVersion Condition=" '$(TargetPlatformVersion)' == '' ">10.0.16299.0</TargetPlatformVersion>

    <TargetPlatformMinVersion>10.0.16299.0</TargetPlatformMinVersion>

    <ProjectTypeGuids>{A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>

person VorTechS    schedule 05.06.2018

Мой стандартный проект .net относительно прост с несколькими пакетами Nuget. Я только что изменился

<TargetFramework>netstandard2.0</TargetFramework>

TO

<TargetFramework>**net461**</TargetFramework> в разделе PropertyGroup файла .csproj, и это помогло мне. Спасибо Брэндону Баркли за ваш ответ в комментариях.

person Pawan    schedule 08.10.2018

добавить ниже в csproj

  <PropertyGroup>
    <TargetFrameworks>netcoreapp2.1;net471</TargetFrameworks>
  </PropertyGroup>
person lemon    schedule 16.11.2018