Dot-Net

找不到與某些項目的目標執行時之一兼容的框架 .NETCoreApp=v1 的執行時目標

  • December 8, 2016

我有一個包含許多 .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.

似乎有幫助的是我在這裡找到的一篇文章找不到與其中一個目標執行時兼容的框架 .NETCoreApp=v1 的執行時目標

我在失敗的項目中添加了以下內容:

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

這似乎解決了這個問題。但我的問題是,為什麼這只發生在某些項目上?project.json未發出錯誤的項目在其文件中沒有此類執行時定義。

這個執行時定義到底是什麼意思?它如何影響我在 linux 或 mac 等其他作業系統上執行的能力?

這個執行時定義到底是什麼意思?

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 都可以預先安裝執行時,或者讓應用程序自帶執行時。

也可以看看

引用自:https://stackoverflow.com/questions/40191498