【问题标题】:Can not find runtime target for framework .NETCoreApp=v1 compatible with one of the target runtimes for some projects找不到与某些项目的目标运行时之一兼容的框架 .NETCoreApp=v1 的运行时目标
【发布时间】:2017-03-04 15:24:08
【问题描述】:

我有一个包含许多 .NET Core 项目的解决方案。我对所有项目进行了 NuGet 更新,现在当我尝试构建时出现以下错误(对于某些项目 - 不是全部):

Can not find runtime target for framework '.NETCoreApp,Version=v1.0' compatible with one of the target runtimes: 'win10-x64, win81-x64, win8-x64, win7-x64'. Possible causes:
1. The project has not been restored or restore failed - run `dotnet restore`
2. The project does not list one of 'win10-x64, win81-x64, win8-x64, win7-x64' in the 'runtimes' section.
3. You may be trying to publish a library, which is not supported. Use `dotnet pack` to distribute libraries.

似乎有帮助的是我在Can not find runtime target for framework .NETCoreApp=v1 compatible with one of the target runtimes 找到的一个帖子

我在失败的项目中添加了以下内容:

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

这似乎解决了问题。但我的问题是,为什么这只发生在某些项目上?未发出错误的项目在其project.json 文件中没有此类运行时定义。

这个运行时定义到底是什么意思?它如何影响我在 linux 或 mac 等其他操作系统上运行的能力?

【问题讨论】:

  • 您能否举一个 project.json 示例来说明一个可行的项目和一个不可行的项目?

标签: .net asp.net-core .net-core asp.net-core-1.0


【解决方案1】:

这个运行时定义到底是什么意思?

runtimes 列出了我们的包支持的运行时。 独立部署需要列出运行时。当一个部署有自己的运行时,它就是自包含的。

我们如何知道我们的部署是否是独立的? dependencies 列出我们的包所依赖的包。这些依赖项分为三种类型。

  • build 该软件包仅用于构建,不是部署的一部分
  • platform 软件包将依赖于预安装的运行时
  • default 两者都不是

如果我们的"Microsoft.NETCore.App" 依赖是default 类型,那么它是自包含的,我们需要自带运行时。如果它是platform 类型,那么它是依赖于框架的。

为什么这种情况只发生在某些项目上?

它只会发生在自包含部署的项目中。如果您查看那些不需要runtimes 属性的项目,您会发现它们要么是类库,要么是依赖于框架的。

独立部署

 "frameworks": {
   "netcoreapp1.0": {
     "dependencies": {
       "Microsoft.NETCore.App": {
          "version": "1.0.0"
       }
     }
   }
 },
 "runtimes": {
   "win10-x64": {},
   "osx.10.10-x64": {}
 }

框架依赖部署

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

类库

 "frameworks": {
   "netstandard1.6": {}
 }

这对我在 linux 或 mac 等其他操作系统上运行的能力有何影响?

它没有。 Windows、Mac OS 和 Linux 都可以预先安装运行时,或者让应用程序自带运行时。

另见

【讨论】:

  • 感谢您的详细回答。因此,如果我理解正确,那么通过独立部署我不需要在 linux 上安装 DOTNETCORE?此外,正如我所提到的,这仅在我更新 NuGet 包之后才发生 - 为什么突然?会影响性能吗?
  • 我发现如果在"Microsoft.NETCore.App" 下而不是将其保留为"Microsoft.NETCore.App": "1.0.1" 我添加"version": "1.0.1","type": "platform" 而不是在没有runtime 定义的情况下编译。这到底是什么,什么被认为更好 - 有或没有runtime
  • @developer82 是的。对于独立部署,您无需在 Linux 上安装 DOTNETCORE。
  • @developer82 为什么突然?要回答这个问题,我需要查看更新前后的 Nuget 包。
  • @developer82 会影响性能吗?据我所知,它不会影响性能。在一种情况下,机器上已经安装了运行时;在另一种情况下,您的应用从 NuGet 恢复运行时。据我所知,只要它是相同的运行时,它不会影响性能。
猜你喜欢
  • 2016-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多