Конвертировать.Net Core в.Net Framework
У меня есть веб-проект проекта.Net Core, и по разным причинам я хочу преобразовать его в проект.Net Framework.
Есть ли простой способ сделать это, или мне нужно начать заново и импортировать код из предыдущих проектов
11 ответов
Я загрузил основной проект в VS 2017 RC Community и открыл *.csproj в текстовом редакторе.
Просто удали тег
<RuntimeFrameworkVersion>
и заменить
<TargetFramework>netcoreapp1.1</TargetFramework>
в
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
А ведь в свойствах проекта установите любой другой фреймворк и сбросьте обратно (VS перезагрузить и восстановить файл *.csproj).
Это работало для меня в 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, и вы можете добавить их через графический интерфейс, если версии отличаются от моих выше.
Здесь много похожих ответов, но я не увидел ни одного, который был бы вполне подходящим, поэтому я бы хотел оставить это здесь на всякий случай, если кто-то еще в той же обуви.
Просто чтобы прояснить, мой проект был консольной программой. Так что, если вы пытаетесь использовать этот ответ для чего-то другого, ваш пробег может отличаться.
В вашем .csproj
файл, внутри <PropertyGroup></PropertyGroup>
пометить, изменить <TargetFramework>
отразить следующее:
<TargetFramework>net461</TargetFramework>
Теперь в этом примере я использовал v4.6.1. Я могу только предположить, что вы включите свою версию за словом "net", без точек. Удачи!
Ни один из ответов здесь не работал для меня. В.Net Core 2 файл project.json больше не существует. Тем не менее, я решил эту проблему, используя следующие шаги.
1) Я удалил все пакеты nuget из моего существующего проекта.
2) Я создал отдельный проект основного веб-приложения.net, ориентированный на.net 4.61. Это должно было получить пакеты nuget по умолчанию.
3) Я отредактировал файл временного проекта.csproj, скопировал все узлы PackageReference внутри ItemGroup и вставил их в файл существующих проектов.csproj.
4) Отредактировал узел TargetFramework (внутри PropertyGroup) с "netstandard2" до "net461"
У меня было несколько изменений пакета, чтобы отследить и решить, но в остальном я смог запустить.
Я сделал это, и это сработало
удалять
"Microsoft.NETCore.App": {
"version": "1.1.0",
"type": "platform"
}
из проекта.
затем замените часть фреймворков следующим образом:
"frameworks": {
"net46": { }
},
затем восстановите пакеты.
РЕДАКТИРОВАТЬ: Это устарело сейчас.
В моей версии Visual Studio 2017 (15.6.2) после "Выгрузки проекта" щелкните правой кнопкой мыши и выберите "Изменить". <your project file>
, Мне пришлось:
Добавьте узел:
<TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
Удалить узлы:
<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>
Есть несколько шагов, которые вам нужно сделать, чтобы достичь этого.
- Сначала щелкните правой кнопкой мыши на файле.csproj и добавьте следующее
<TargetFrameworks>netstandard2.0;netcoreapp2.0;net35;</TargetFrameworks>
<RuntimeIdentifiers>win7-x86;win7-x64</RuntimeIdentifiers> <EnableDefaultCompileItems>false</EnableDefaultCompileItems>
- После внесения этих изменений перезагрузите проект и соберите его.
- Это сгенерирует
.dll
файлы и пакет Nuget для этой сборки в папке Debug/Release проекта. - Добавьте эти
.dll
в Nuget и получить доступ к этим проектам из Nuget.
Попробуйте описанные выше шаги. Это должно работать.
Добавить ниже в csproj
<PropertyGroup>
<TargetFrameworks>netcoreapp2.1;net471</TargetFrameworks>
</PropertyGroup>
У меня было всего несколько исходных файлов. Для меня это сработало лучше всего
- Закрытие Visual Studio 2022
- Переименование папки решения
- Создание нового решения Visual Studio типа «Приложение WPF (.NET Framework)» с исходным именем папки и тем же именем проекта.
- Копирование всех *.xaml. *.xaml.cs и *.cs из старого проекта в новый, не трогая *.sln, *.csproj и *.config.
- Проект->Добавить существующий элемент… и добавление скопированных элементов
- Добавление всех специальных ссылок.
Вот и переделал все без нареканий.
Мой стандартный проект.net относительно прост с несколькими пакетами Nuget. Я только что изменился
<TargetFramework>netstandard2.0</TargetFramework>
К
<TargetFramework>**net461**</TargetFramework>
в разделе PropertyGroup файла.csproj, и это сделало всю работу за меня. Спасибо Брэндону Баркли за ваш ответ в комментариях.
Лично я просто меняю net461 и перезагружаю всю программу. Это просто работает.
Вам также может потребоваться перейти к атрибутам и выбрать целевую платформу .NET Framework 4.6.1, если вы видите, что выбор пуст.
Visual Studio может автоматически распознать мое изменение в .NET Framework, а не в .NET Core, внешний вид настроек также изменится соответствующим образом.