Не удается найти цель выполнения для среды .NETCoreApp = v1, совместимую с одной из целевых версий
Я пытаюсь перенести проект Asp.Net Core RC1 на RC2 и следую за этой документацией, а также после инструкции для миграции DNX в .NET CLI.
Я получаю следующую ошибку при попытке dotnet run
:
Не удается найти цель выполнения для фреймворка '.NETCoreAPP, Version = v1.0' совместимый с одним из целевых периодов: "win10-x64, win81-x64, win8-x64, win7-x64 '. Возможные причины:
- Проект не был восстановлен или не восстановлен сбой - восстановление" dotnet restore "
- В проекте не указан один из" win10-x64, win81-x64, win7-x64 "в" runtimes"
Я запустил dotnet restore
и, похоже, успешно выполнил.
Я обновил все соответствующие пакеты до RC2.
Ответы
Ответ 1
Я должен был сделать именно то, что сказал сообщение об ошибке. При переходе с RC1 я не понимал, что мне нужно указать раздел runtimes
в моем файле project.json
.
В моем project.json
я добавил следующий раздел:
"runtimes": {
"win10-x64": { }
}
И мне было хорошо идти.
Обновление 27 февраля 2017 года
Новые шаблоны проектов в Visual Studio 2017 RC больше не требуют указания времени выполнения (в project.json
или .csproj
), если вы решите развернуть приложение как Framework Dependent Deployment
(FDD).
Если вы решили развернуть свое приложение с помощью Self-contained Deployment
(SCD), вам нужно будет указать все время выполнения, которое вы хотите, чтобы ваше приложение запускалось заранее в вашем файле .csproj
.
Ниже приведен пример файла .csproj
для приложения, использующего метод развертывания SCD:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp1.0</TargetFramework>
<VersionPrefix>1.0.0</VersionPrefix>
<DebugType>Portable</DebugType>
<RuntimeIdentifiers>win10-x64;osx.10.11-x64</RuntimeIdentifiers>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="9.0.1" />
</ItemGroup>
</Project>
Подробнее см. эту ссылку, которая включает подробное описание обоих вариантов развертывания, а также их преимущества и недостатки.
Ответ 2
Я получил эту ошибку после обновления основного шаблона VS2015 до 1.0.1. Это потому, что у меня есть PCL, который нацелен на netstandard 1.4
, если вы не хотите указывать каждую среду выполнения. Просто измените разметку зависимостей для Microsoft.NETCore.App
на это:
"Microsoft.NETCore.App": {
"type": "platform",
"version": "1.0.1"
}
Ответ 3
в project.json Я изменил этот (добавленный тип):
//"Microsoft.NETCore.App": "1.1.0",
"Microsoft.NETCore.App": { "version": "1.1.0", "type": "platform" },
Теперь я могу снова создать: -)
update: теперь я могу снова создать, но не "запустить" веб-сайт.
Вам нужно убедиться, что у вас есть время выполнения и sdk:
*) Инструменты Visual Studio включают .NET Core 1.0.1. Чтобы добавить поддержку .NET Core 1.1, вам также необходимо установить среду .NET Core 1.1.
https://www.microsoft.com/net/download/core#/current
Ответ 4
Я получил эту ошибку, потому что я использовал невероятно сломанный диспетчер пакетов NuGet в Visual Studio 2015 для обновления зависимостей project.json. Он обратился к этому:
"frameworks": {
"netcoreapp1.0": {
"dependencies": {
"Microsoft.NETCore.App": {
"type": "platform",
"version": "1.0.1"
}
}
}
}
в это:
"dependencies": {
"Microsoft.NETCore.App": "1.1.0"
},
"frameworks": {
"netcoreapp1.0": {}
}
Пока, определение платформы!
Ответ 5
Если вы прочтете эти две ссылки:
Сначала https://docs.microsoft.com/en-us/dotnet/articles/core/tutorials/using-with-xplat-cli
и
second, https://docs.microsoft.com/en-us/dotnet/articles/core/rid-catalog
Вы увидите, что вы можете создать полностью переносимую версию, используя следующий фрагмент в корневом элементе зависимостей в project.json. Нет необходимости указывать время выполнения, так как это среда выполнения уровня CORE, которая должна быть агностической для платформы или известна как "зависимая от Framework"
"Microsoft.NETCore.App": {
"type": "platform",
"version": "1.0.1"
}
или вы можете создать для нескольких целевых платформ ( "автономные приложения" ), удалив элемент типа: platform следующим образом:
Добавьте это в корневой элемент зависимостей в project.json
"Microsoft.NETCore.App": {
"version": "1.0.1"
}
и добавьте это как новый элемент уровня корня
"runtimes": {
"win10-x64": {}, /* one or more RIDs */
"osx.10.10-x64": {}
},
Для нескольких целевых серверов необходимо указать имена платформ, которые называются "Идентификаторы среды выполнения .NET Core (RID)". Список из них можно найти по второй ссылке выше. Он включает в себя множество разновидностей Windows, Linux и OS X.
Для хорошего обзора различных вариантов развертывания вы также можете прочитать эту страницу:
https://docs.microsoft.com/en-us/dotnet/articles/core/deploying/index
Из приведенной выше ссылки:
Вы можете создать два типа развертываний для приложений .NET Core:
Рациональное развертывание
Как следует из названия, зависящее от платформы развертывание (FDD) полагается на общую общесистемную версию .NET Core, которая будет присутствовать в целевой системе. Поскольку .NET Core уже присутствует, ваше приложение также переносится между установками .NET Core. Ваше приложение содержит только собственный код и любые зависимые от сторонних зависимостей, которые находятся за пределами библиотек .NET Core. FDD содержат DLL файлы, которые можно запустить с помощью утилиты dotnet из командной строки. Например, dotnet app.dll запускает приложение с именем app.
Самостоятельное развертывание
В отличие от FDD, автономное развертывание (SCD) не зависит от каких-либо общих компонентов, которые должны присутствовать в целевой системе. Все компоненты, включая библиотеки .NET Core и среду выполнения .NET Core, включены в приложение и изолированы от других приложений .NET Core. SCD включают исполняемый файл (например, app.exe на платформах Windows для приложения с именем app), который является переименованной версией хоста .NET Core.NET и файла .dll(например, app.dll), который является фактическое приложение.
Ответ 6
В моем случае я только что обновил все пакеты nuget до их последних версий, и nuget изменил ссылку на пакет "Microsoft.NETCore.App" на следующее:
"Microsoft.NETCore.App": "1.1.0"
Я изменил его на следующую форму, и все сработало нормально:
"Microsoft.NETCore.App": {
"version": "1.1.0",
"type": "platform"
}
До свидания 3 часа моей жизни....
Ответ 7
если вы выполните новый dotnet и посмотрите на выходной проект json, вы увидите, что прозвища изменились.
Внесите изменения в project.json следующим образом:
"dependencies": {},
"frameworks": {
"netcoreapp1.0": {
"dependencies": {
"Microsoft.NETCore.App": {
"type": "platform",
"version": "1.0.1"
}
},
"imports": "dnxcore50"
}
}
Ответ 8
Я нашел одну полезную ссылку из комментария svick на следующей странице:
https://github.com/dotnet/cli/issues/2442
Ответ 9
Я нашел, что вам нужно следующее в project.json. Вот что требовалось для исправления моей ошибки:
Зависимости
"dependencies": {
"Microsoft.NETCore.App": {
"version": "1.0.1",
"type": "platform"
},
}
Каркасы
"frameworks": {
"netcoreapp1.0": {
"imports": [
"dotnet5.6",
"portable-net45+win8"
]
}
},
Runtime
"runtimeOptions": {
"configProperties": {
"System.GC.Server": true
}
},
Возможно, вы захотите добавить время автономной работы, если планируете публикацию в IIS. Посмотрите на следующее:
"runtimes": {
"win10-x64": {}
},
Вот общий совет, который хорошо сработал у меня. Когда мои вещи ломаются, я иногда создаю стандартное приложение ASP.NET Core или веб-сайт или пустой веб-api, чтобы посмотреть зависимости в project.json и в другом месте. Вы часто можете много чего поймать. Ответы выше, но я думал, что напишу это здесь, если кто-то захочет разделить логику больше в общем шаблоне, который использует ASP.NET Core.
Ответ 10
В Windows 7 с VS 2015, soluiton после обновления в netcore 1.1.2 менял файл project.json следующим образом:
{
"version": "1.0.0-*",
"buildOptions": {
"emitEntryPoint": true
},
"dependencies": {
"Microsoft.NETCore.App": "1.1.2"
},
"frameworks": {
"netcoreapp1.0": {
"imports": "dnxcore50" //This line must disappear
}
},
"runtimes": { //
"win7-x64": {} //Add this lines
} //
}
После изменения зависимостей будут обновляться и альта.