无法找到与其中一个目标运行时兼容的框架.NETCoreApp = v1的运行时目标

Bla*_*ord 149 asp.net

我试图迁移一个Asp.Net核心RC1项目RC2和一直在关注这个文件和也按指示为DNX迁移到.NET CLI.

我尝试时收到以下错误dotnet run:

无法找到与其中一个目标运行时兼容的框架'.NETCoreAPP,Version = v1.0'的运行时目标:'win10-x64,win81-x64,win8-x64,win7-x64'.可能的原因:

  1. 项目尚未恢复或恢复失败-run'netnet restore'
  2. 该项目没有列出'runtimes'中的'win10-x64,win81-x64,win7-x64'之一

我跑了dotnet restore,似乎已经成功完成了.

我已将所有相关包更新到RC2.

Bla*_*ord 290

我应该完成错误消息所说的内容.从RC1迁移时,我没有意识到我必须runtimes在我的project.json文件中指定一个部分.

在我的project.json我添加了以下部分:

"runtimes": {
    "win10-x64": { }
  }
Run Code Online (Sandbox Code Playgroud)

我很高兴.


2017年2月27日更新

如果您选择将应用程序部署为(FDD),则Visual Studio 2017 RC中的新项目模板不再需要提前指定(in project.json.csproj)运行时间Framework Dependent Deployment.

但是,如果您选择使用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>
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅此链接,其中包括对这两种部署选项的详细说明,以及它们的优缺点.

  • 我在VS 2015 Update 3中创建了一个新项目.但仍然缺少此部分. (42认同)
  • 这也适用于.Net Core 1.1 (12认同)
  • 我认为并不总是需要添加此设置.文档说:"如果您是可以在任何运行时运行的可移植类库,则无需指定运行时." - 对于我的大多数项目来说都是如此,但是当我向我的解决方案添加Entity Framework Core项目时出现了这个错误.我认为EF Core - 至少在它的RC2状态 - 对它可以运行的平台有限制,因此,引用它的项目可能需要遵守这些设置.但我只是在猜测.文档在这一点上确实令人困惑. (7认同)
  • 甚至不需要在新的1.0核心VS2015模板上,更新到1.0.1并得到上述错误,thx修复! (7认同)
  • 错误消息未提及"project.json".人们应该怎么猜? (5认同)

Mik*_*e_G 76

将VS2015核心模板更新到1.0.1后,我收到此错误.这是因为netstandard 1.4 如果您不想指定每个运行时,我有一个PCL ,只需将依赖关系标记更改为Microsoft.NETCore.App:

"Microsoft.NETCore.App": {
 "type": "platform",
 "version": "1.0.1"
}
Run Code Online (Sandbox Code Playgroud)


juF*_*uFo 34

在project.json我改变了这个(添加类型):

//"Microsoft.NETCore.App": "1.1.0",
"Microsoft.NETCore.App": { "version": "1.1.0", "type": "platform" },
Run Code Online (Sandbox Code Playgroud)

现在我可以再次建造:-)

更新:现在我可以再次构建但不"运行"网站.

您还需要确保拥有运行时和sdk:

*)Visual Studio工具包括.NET Core 1.0.1.要添加.NET Core 1.1支持,还需要安装.NET Core 1.1运行时.

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


Nat*_*nSr 20

我收到此错误是因为我在Visual Studio 2015中使用了令人难以置信的损坏的NuGet包管理器来更新我的project.json依赖项.它转过来了:

"frameworks": {
  "netcoreapp1.0": {
    "dependencies": {
      "Microsoft.NETCore.App": {
        "type": "platform",
        "version": "1.0.1"
      } 
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

进入这个:

"dependencies": {
  "Microsoft.NETCore.App": "1.1.0"
},
"frameworks": {
  "netcoreapp1.0": {}
}
Run Code Online (Sandbox Code Playgroud)

再见,平台定义!


Big*_*mAZ 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"
}
Run Code Online (Sandbox Code Playgroud)

或者您可以通过删除类型:platform元素来构建多个目标平台("自包含应用程序"),如下所示:

将其添加到project.json中的dependencies根元素

"Microsoft.NETCore.App": {
    "version": "1.0.1"
}
Run Code Online (Sandbox Code Playgroud)

并将其添加为新的根级别元素

"runtimes": {
    "win10-x64": {},  /* one or more RIDs */
    "osx.10.10-x64": {}
  },
Run Code Online (Sandbox Code Playgroud)

多个目标要求您提供称为".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包括可执行文件(例如Windows平台上的app.exe,名为app的应用程序),它是特定于平台的.NET Core主机的重命名版本,以及.dll文件(例如app.dll),它是实际应用.


Ale*_*nor 9

在我的情况下,我刚刚将所有nuget包更新到他们的最新版本,nuget将我的'Microsoft.NETCore.App'包引用更改为以下内容:

"Microsoft.NETCore.App": "1.1.0"
Run Code Online (Sandbox Code Playgroud)

我将其更改回以下表单,一切正常:

"Microsoft.NETCore.App": {
      "version": "1.1.0",
      "type": "platform"
    }
Run Code Online (Sandbox Code Playgroud)

我的生命3小时再见....