Не удается найти цель выполнения для среды .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"
    }
  }

Ответ 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
  }                             //
}

После изменения зависимостей будут обновляться и альта.