无法找到与某个目标运行时兼容的 framework.NETCoreApp = v1运行时目标

我正在尝试迁移一只阿斯匹灵。Net Core RC1项目到 RC2,并一直跟随这个 文件,也跟随 指示为 DNX 迁移到。NET CLI.

当我尝试 dotnet run时,我得到以下错误:

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

  1. 项目尚未还原或还原失败运行的“网络还原”
  2. 该项目没有在“运行时”中列出“ win10-x64,win81-x64,win7-x64”中的一个

我已经运行了 dotnet restore,它似乎已经成功完成。

我已经将所有相关软件包更新到 RC2。

52077 次浏览

我应该完全按照错误消息所说的做。当从 RC1迁移时,我没有意识到我必须在我的 project.json文件中指定一个 runtimes节。

在我的 project.json中,我增加了以下部分:

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

我已经准备好了。


2017年2月27日最新情况

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

但是,如果选择使用 Self-contained Deployment(SCD)部署应用程序,则需要在 .csproj文件中指定所有希望应用程序在 预付款上运行的运行时间。

下面是一个使用 SCD 部署方法的应用程序的 .csproj文件示例:

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

有关更多信息,请参见 这个链接,其中包括对这两种类型的部署选项及其优缺点的详细描述。

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

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

我收到这个错误是因为我在 Visual Studio 2015中使用了令人难以置信的崩溃的 NuGet Package Manager 来更新我的 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": {}
}

再见,平台定义!

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

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

现在我可以重建了: -)

更新: 现在我可以重新建立网站,但不能“运行”网站。

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

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

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

如果你阅读这两个链接:

首先,https://learn.microsoft.com/en-us/dotnet/articles/core/tutorials/using-with-xplat-cli

还有

第二,https://learn.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": {}
},

多个目标需要您提供平台名称称为 & quot; .NET 核心运行时标识符(RID)”这些名称的列表可以在上面的第二个链接中找到。它包括 Windows、 Linux 和 OS X 的多种风格。

要想对各种部署选项有一个很好的概述,您也可以阅读本页:

Https://learn.microsoft.com/en-us/dotnet/articles/core/deploying/index

以上连结:

您可以为.NET Core 应用程序创建两种类型的部署:

依赖于框架的部署

顾名思义,框架依赖的部署(FDD)依赖于共享的系统范围版本。NET 核心存在于目标系统上。因为。NET 核心已经存在,您的应用程序也可移植之间的安装。NET 核心。您的应用程序只包含自己的代码和任何第三方依赖项。NET 核心库。FDD 包含。可以通过使用命令行中的 dotnet 实用程序启动的 dll 文件。例如,dotnet app.dll 运行一个名为 app 的应用程序。

自给自足的部署

与 FDD 不同,自包含部署(SCD)不依赖于目标系统上存在的任何共享组件。所有部件,包括两者。NET 核心库和。NET 核心运行库,包含在应用程序中,并与其他。NET 核心应用程序。SCD 包括一个可执行文件(例如,Windows 平台上名为 app 的应用程序的 app.exe) ,这是特定于平台的重命名版本。NET 核心主机,以及一个。Dll 文件(例如 app.dll) ,这是实际的应用程序。

如果执行 dotnetnew 并查看输出项目 json,您将看到名字已经更改。

对 project. json 进行以下更改:

"dependencies": {},
"frameworks": {
"netcoreapp1.0": {
"dependencies": {
"Microsoft.NETCore.App": {
"type": "platform",
"version": "1.0.1"
}
},
"imports": "dnxcore50"
}
}

我在下面的页面中找到了一个来自 svick 评论的有用链接: Https://github.com/dotnet/cli/issues/2442

我发现在 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 核心应用程序,要么是网站,要么是空的 web api 来查看 project.json 和其他地方的依赖关系。你经常可以通过这种方式捕捉到很多东西。上面的答案是正确的,但我认为我会写在这里,如果有人想要分离出更多的逻辑在一般模板格式,ASP.NET 核心使用。

在我的例子中,我刚刚更新了所有的 nuget 包到最新版本,nuget 改变了我的‘ Microsoft.NETCore’。应用程序的软件包引用如下:

"Microsoft.NETCore.App": "1.1.0"

我把它改回下面的形式,一切正常:

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

再见,我生命中的3个小时..。

在 VS2015的 Windows 7中,在更新到 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
}                             //
}

更改此属性后,依赖关系将更新并中提琴。