无法找到与其中一个目标运行时

时间:2016-06-02 11:31:23

标签: asp.net

我正在尝试将Asp.Net Core RC1项目迁移到RC2并且一直关注此documentation并且还跟随instructions进行DNX迁移到.NET CLI。

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

  

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

     
      
  1. 项目尚未恢复或恢复失败-run' dotnet restore'
  2.   
  3. 该项目未列出' win10-x64,win81-x64,win7-x64'在'运行时'
  4.   

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

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

9 个答案:

答案 0 :(得分:290)

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

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

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

我很高兴。

2017年2月27日更新

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

但是,如果您选择使用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>

请参阅this link以获取更多信息,其中包括对这两种部署选项的详细说明,以及它们的优缺点。

答案 1 :(得分:76)

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

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

答案 2 :(得分:20)

我收到此错误是因为我在Visual Studio 2015中使用了令人难以置信的破坏的NuGet包管理器来更新我的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": {}
}

再见,平台定义!

答案 3 :(得分: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"
}

或者您可以通过删除类型: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包括可执行文件(例如Windows平台上的app.exe,名为app的应用程序),它是特定于平台的.NET Core主机的重命名版本,以及.dll文件(例如app.dll),它是实际应用。

答案 4 :(得分:9)

在我的情况下,我刚刚将所有nuget软件包更新到他们的最新版本,并且nuget改变了我的&#39; Microsoft.NETCore.App&#39;包引用如下:

"Microsoft.NETCore.App": "1.1.0"

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

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

再见3小时......

答案 5 :(得分:4)

如果你执行一个新的dotnet并查看输出项目json,你会发现这些标记已经改变了。

对project.json进行如下更改:

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

答案 6 :(得分:0)

我在以下页面的svick发现了一条有用的链接: https://github.com/dotnet/cli/issues/2442

答案 7 :(得分: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应用程序,无论是网站还是空的web api,都可以查看project.json和其他地方的依赖项。你经常可以通过这种方式捕获很多东西。上面的答案是现实的,但我想我会写这个,以防有人想要在ASP.NET核心使用的一般模板格式中更多地分离逻辑。

答案 8 :(得分:0)

在使用VS 2015的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
  }                             //
}

更改后,依赖关系将更新和中提琴。