Не удается найти цель времени выполнения для платформы .NETCoreApp = v1, совместимой с одной из целей времени выполнения

149

Я пытаюсь перенести проект Asp.Net Core RC1 на RC2 и следовал этой документации, а также следовал инструкциям по переходу DNX на .NET CLI.

Я получаю следующую ошибку при попытке dotnet run:

Не удается найти цель времени выполнения для платформы .NETCoreAPP, версия = v1.0, совместимую с одной из целей времени выполнения: «win10-x64, win81-x64, win8-x64, win7-x64». Возможные причины:

  1. Проект не был восстановлен или восстановление не удалось - запустите 'dotnet restore'
  2. Проект не перечисляет один из «win10-x64, win81-x64, win7-x64» в «runtime»

Я бежал dotnet restoreи, кажется, успешно завершил.

Я обновил все соответствующие пакеты до RC2.

Блейк Мамфорд
источник

Ответы:

290

Я должен был сделать именно то, что говорится в сообщении об ошибке. При переходе с 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>

Пожалуйста, смотрите эту ссылку для получения дополнительной информации, которая включает в себя подробное описание обоих типов вариантов развертывания, а также их преимущества и недостатки.

Блейк Мамфорд
источник
42
Я создал новый проект в VS 2015 Update 3. И все же этот раздел отсутствовал.
Эдвард Оламисан
7
Я думаю, что не всегда необходимо добавлять этот параметр. Документация гласит: «Если вы переносная библиотека классов, которая может работать в любой среде выполнения, вам не нужно указывать среду выполнения». - Это верно для большинства моих проектов, но эта ошибка появилась, когда я добавил проект Entity Framework Core в свое решение. Я думаю, что EF Core - по крайней мере, в своем состоянии RC2 - имеет ограничение на том, на каких платформах он может работать, поэтому проекты, ссылающиеся на него, могут нуждаться в соответствии с этими настройками. Но я только догадываюсь. Документация действительно запутанная на данный момент.
Бернхард Кениг
7
Это даже не понадобилось в новом шаблоне 1.0 Core VS2015, обновленном до 1.0.1 и получившем ошибку, спасибо за исправление!
Стив МакНивен-Скотт
1
@ SteveMcNiven-Скотт - То же самое здесь. Мне также пришлось добавить еще одну строку в «runtime» для восстановления и сборки на Ubuntu Server: «ubuntu.16.04-x64». YMMV, но ошибка должна указывать на платформу, которую вы пропустили, и ее нужно добавить.
Царь Бомба
5
В сообщении об ошибке не упоминается "project.json". Как люди должны угадывать ??
ПолезноБи
76

Я получил эту ошибку после обновления основного шаблона VS2015 до 1.0.1. Это потому, что у меня есть PCL, который предназначен, netstandard 1.4 если вы не хотите указывать каждую среду выполнения, просто измените разметку зависимости на Microsoft.NETCore.App:

"Microsoft.NETCore.App": {
 "type": "platform",
 "version": "1.0.1"
}
Mike_G
источник
1
Вышеупомянутая разметка исправила мою ошибку компиляции, но IIS Express не запустился бы после этого. Изменение «version»: «1.0.1» на «version»: «1.0.0» решило проблему IIS.
Росс
@Ross обновляет раздел инструментов в project.json, чтобы соответствовать версии NETCore.App
DalSoft
В этом случае "tools": {"Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final"},
DalSoft
1
@DalSoft - Да, я обновил свой VS 2015 несколько недель назад с последними исправлениями, включая IISIntegration.Tools, и это решило проблему Microsoft.NETCore.App: 1.0.1 для меня.
Росс
1
@usefulBee Portable Class Library
Mike_G
35

в project.json я изменил это (добавил тип):

//"Microsoft.NETCore.App": "1.1.0",
"Microsoft.NETCore.App": { "version": "1.1.0", "type": "platform" },

Теперь я могу построить снова :-)

обновление: теперь я могу строить заново, но не "запускать" сайт.

Вы должны убедиться, что у вас есть среда выполнения и SDK:

*) Инструменты Visual Studio включают .NET Core 1.0.1. Чтобы добавить поддержку .NET Core 1.1, вам также необходимо установить среду выполнения .NET Core 1.1.

https://www.microsoft.com/net/download/core#/current

ЮФО
источник
1
Похоже, вы не можете запустить веб-сайт, потому что вам нужно установить .NET Core 1.1 SDK
Виктор Шароватов
и иногда переустановка Runtime также необходима, я узнал.
ЮФО
Это помогло мне. Спасибо! Закомментируем «Microsoft.NETCore.App» непосредственно из зависимостей в project.json и изменим его на «frameworks»: {"netcoreapp1.1": {"dependencies": {"Microsoft.NETCore.App": {" версия ":" 1.1.0 "," тип ":" платформа "}}}},
неодим
1
Спасибо. Эти 2 простых шага решили проблему. Надеюсь, MS сделает его более удобным для разработчиков в ближайшем будущем.
EvZ
20

Я получил эту ошибку, потому что использовал обновленный менеджер пакетов 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": {}
}

Пока, определение платформы!

NathanAldenSr
источник
15

Если вы читаете эти две ссылки:

Во-первых, https://docs.microsoft.com/en-us/dotnet/articles/core/tutorials/using-with-xplat-cli

и

во-вторых, https://docs.microsoft.com/en-us/dotnet/articles/core/rid-catalog

Вы увидите, что вы можете создать полностью переносимую версию, используя следующий фрагмент в корневом элементе зависимостей в project.json. Нет необходимости указывать время выполнения, так как это время выполнения уровня CORE, которое не зависит от платформы или известно как «Зависит от платформы»

"Microsoft.NETCore.App": {
    "type": "platform",
    "version": "1.0.1"
}

или вы можете создать для нескольких целевых платформ («автономных приложений»), удалив элемент type: platform, например так:

Добавьте это к корневому элементу зависимостей в project.json

"Microsoft.NETCore.App": {
    "version": "1.0.1"
}

и добавить это как новый элемент корневого уровня

"runtimes": {
    "win10-x64": {},  /* one or more RIDs */
    "osx.10.10-x64": {}
  },

Для нескольких целей требуется указать имена платформ, известные как «.NET Core Runtime IDentifiers (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 для конкретной платформы, и файл .dll (например, app.dll), который фактическое применение.

BigTFromAZ
источник
9

В моем случае я только что обновил все пакеты nuget до их последних версий, а nuget изменил ссылку на мой пакет Microsoft.NETCore.App на следующую:

"Microsoft.NETCore.App": "1.1.0"

Я изменил его обратно на следующую форму, и все работало нормально:

"Microsoft.NETCore.App": {
      "version": "1.1.0",
      "type": "platform"
    }

До свидания 3 часа моей жизни ....

Алекс Хоуп О'Коннор
источник
4

если вы выполните dotnet new и посмотрите на выходной проект json, вы увидите, что названия изменились.

Внесите изменения в ваш project.json следующим образом:

"dependencies": {},
   "frameworks": {
     "netcoreapp1.0": {
        "dependencies": {
         "Microsoft.NETCore.App": {
         "type": "platform",
         "version": "1.0.1"
         }
    },
      "imports": "dnxcore50"
    }
  }
Джон Бэнкс
источник
Для меня это лучшее решение. .NET Core постоянно меняется, и все меняется. Использование CLI для создания файла project.json для исправления изменений в вашем project.json, которые NuGet PM не может поддерживать согласованными и обновленными.
Джеймс Б.
0

Я нашел одну полезную ссылку из комментария svick под следующей страницей: https://github.com/dotnet/cli/issues/2442

Technorider
источник
1
Хотя ваш ответ на 100% правильный, он также может стать на 100% бесполезным, если эта ссылка будет перемещена, изменена, объединена с другой или основной сайт просто исчезнет ... :-( Поэтому, пожалуйста, отредактируйте свой ответ и скопируйте соответствующую ссылку. переходя от ссылки к вашему ответу, тем самым гарантируя ваш ответ на 100% срока службы этого сайта! ;-) Вы всегда можете оставить ссылку внизу вашего ответа в качестве источника для вашего материала ...
Дональд Дак
0

Я нашел, что вам нужно следующее в project.json. Вот что требовалось исправить мою ошибку:

зависимости

"dependencies": {
   "Microsoft.NETCore.App": {
      "version": "1.0.1",
      "type": "platform"
   },
}

Каркасы

"frameworks": {
    "netcoreapp1.0": {
      "imports": [
        "dotnet5.6",
        "portable-net45+win8"
      ]
    }
  },

время выполнения

  "runtimeOptions": {
    "configProperties": {
      "System.GC.Server": true
    }
  },

Возможно, вы захотите добавить среды выполнения, если вы планируете публикацию в IIS. Пожалуйста, смотрите что-то следующее:

 "runtimes": {
    "win10-x64": {}
  },

Вот общий совет, который хорошо сработал для меня. Когда мои вещи ломаются, я иногда создаю приложение ASP.NET Core по умолчанию либо на веб-сайте, либо на пустом веб-интерфейсе API, чтобы посмотреть на зависимости в project.json и других местах. Таким образом вы часто можете поймать много вещей. Приведенные выше ответы точны, но я подумал, что напишу это здесь на случай, если кто-то захочет отделить логику от общего формата шаблона, который использует ASP.NET Core.

hlyates
источник
0

В Windows 7 с VS 2015 решение после обновления до 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
  }                             //
}

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

Сантьяго Суарес
источник