2016-10-22 42 views
11

我有许多.NET Core项目的解决方案。我做的NuGet更新所有的项目,现在当我尝试建立我收到以下错误(有些项目 - 不是全部):无法找到框架的运行时目标.NETCoreApp = v1兼容某些项目的目标运行时间

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等其他操作系统上运行的能力?

+3

可不可以给该作品是没有一个项目,一个一个例子project.json? – svick

回答

14

运行时定义的含义是什么?

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或运行能力苹果电脑?

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

+1

感谢您的详细解答。所以如果我理解正确,那么使用自包含的部署,我不需要在Linux上安装DOTNETCORE?另外,正如我所提到的,这只是在我更新NuGet包之后才发生的 - 为什么突然间呢?它会影响性能吗? – developer82

+0

我发现如果在'“Microsoft.NETCore.App”'而不是将它保留为'“Microsoft.NETCore.App”:“1.0.1”'我添加了''version“:”1.0.1“,'和''type“:”platform“比不带'runtime'定义的编译。这究竟是什么,什么被认为更好 - 有无运行时? – developer82

+0

@ developer82是的。对于独立的部署,您不需要在Linux上安装DOTNETCORE。 –