Неможливо знайти ціль виконання для Framework .NETCoreApp = v1, сумісний з одним із цільових режимів виконання


149

Я намагаюся перенести проект Asp.Net Core RC1 на RC2 і дотримуюся цієї документації, а також дотримуюся інструкцій щодо міграції DNX до .NET CLI.

Під час спроби я отримую таку помилку dotnet run:

Неможливо знайти ціль виконання для рамки. Можливі причини:

  1. Проект не було відновлено або відновлено не вдалося - запустіть 'відновлення dotnet'
  2. У проекті не вказано жодного з "win10-x64, win81-x64, win7-x64" у "час виконання"

Я бігав 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 та отриманій вище помилки, thx для виправлення!
— Стів Макнівен-Скотт

1
@ SteveMcNiven-Scott - Те саме тут. Я також повинен був додати ще один рядок у "час виконання", щоб його відновити та побудувати на сервері Ubuntu: "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"
}

1
Наведена вище розмітка виправила мою компіляційну помилку, але IIS Express не запустився після цього. Зміна "версії": "1.0.1" на "версія": "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 Портативна бібліотека класів
— 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
— Віктор Шароватов

а іноді також потрібна перевстановлення режиму виконання, що я дізнався.
— juFo

Це мені допомогло. Дякую! Коментуючи "Microsoft.NETCore.App" безпосередньо із залежностей у project.json та змінюючи його на "рамки": {"netcoreapp1.1": {"залежності": {"Microsoft.NETCore.App": {" версія ":" 1.1.0 "," type ":" платформа "}}}},
— неодим

1
Дякую. Ці 2 прості кроки вирішили проблему. Сподіваємось, MS в найближчому майбутньому зробить це більш приємним для розробників.
— EvZ

20

Я отримав цю помилку, тому що я використав неймовірно зламаний NuGet Package Manager у 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": {}
}

До побачення, визначення платформи!


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"
}

або ви можете створити для декількох цільових платформ ("автономні програми"), видаливши тип: платформенний елемент на зразок цього:

Додайте це до кореневого елемента залежності в 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 для додатка з назвою додаток), який є перейменованою версією конкретного платформи .NET Core, а також .dll-файл (наприклад, app.dll), який є фактичне застосування.


9

У моєму випадку я нещодавно оновив усі пакунки нугів до їх останніх версій, а 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/isissue/2442


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.


0

У 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
  }                             //
}

Після зміни цього залежності будуть оновлені та порушені.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.