找不到与目标运行时之一兼容的框架.NETCoreApp = v1的运行时目标


149

我正在尝试将Asp.Net Core RC1项目迁移到RC2,并且一直在遵循本文档并且也按照说明进行操作 DNX迁移到.NET CLI进行。

我尝试时遇到以下错误dotnet run

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

  1. 项目尚未还原或还原失败-运行'dotnet restore'
  2. 该项目未在“运行时”中列出“ win10-x64,win81-x64,win7-x64”之一

我已经跑步dotnet restore,而且似乎已经成功完成。

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

Answers:


290

我应该完全按照错误消息的意思进行操作。从RC1迁移时,我没有意识到必须runtimesproject.json文件中指定一个部分。

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

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

而且我很好走。


2017年2月27日更新

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

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

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

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

请查看此链接以获取更多信息,其中包括对两种部署选项及其优缺点的完整描述。


42
我在VS 2015 Update 3中创建了一个新项目。仍然缺少此部分。
爱德华·奥拉米桑

7
我认为并非总是需要添加此设置。该文档说:“如果您是可在任何运行时上运行的可移植类库,则无需指定运行时。” -对于我的大多数项目来说都是如此,但是当我在解决方案中添加Entity Framework Core项目时,就会出现此错误。我认为EF Core(至少处于RC2状态)对其可以在哪些平台上运行有限制,因此引用它的项目可能需要符合这些设置。但是我只是在猜测。在这一点上,文档确实令人困惑。
伯恩哈德·科尼希

7
甚至在新的1.0 Core VS2015模板上都不需要此文件,该模板已更新为1.0.1,并收到上述错误,谢谢!
Steve McNiven-Scott

1
@ SteveMcNiven-Scott-同样。我还必须在“运行时”中添加另一行以使其还原并在Ubuntu Server上构建:“ ubuntu.16.04-x64”。YMMV,但该错误应指出您缺少的平台,需要添加。
沙皇炸弹

5
错误消息没有提及“ project.json”。人们应该如何猜测?
有用蜜蜂

76

将VS2015核心模板更新为1.0.1后收到此错误。这是因为netstandard 1.4 如果您不想指定每个运行时,那么我有一个PCL可以作为目标,只需Microsoft.NETCore.App为此更改相关性标记:

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

1
上面的标记修复了我的编译错误,但之后IIS Express无法启动。将“版本”:“ 1.0.1”更改为“版本”:“ 1.0.0”解决了IIS问题。
罗斯

@Ross更新project.json中的tools部分以匹配版本NETCore.App
DalSoft

在这种情况下,“工具”:{“ Microsoft.AspNetCore.Server.IISIntegration.Tools”:“ 1.0.0-preview2-final”},
DalSoft

1
@DalSoft-是的,几周前,我用包括IISIntegration.Tools在内的最新补丁更新了VS 2015,它为我解决了Microsoft.NETCore.App:1.0.1问题。
罗斯

1
@usefulBee便携式类库
Mike_G '16

35

在project.json中,我对此进行了更改(添加类型):

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

现在,我可以再次构建:-)

更新:现在我可以再次构建,但不能“运行”该网站。

您需要确保同时具有运行时和sdk:

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

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


1
看来您无法运行该网站,因为您需要安装.NET Core 1.1 SDK
Victor Sharovatov

有时我发现还需要重新安装运行时。
juF16年

这对我有帮助。谢谢!直接从project.json中的依赖项中注释掉“ Microsoft.NETCore.App”,并将其更改为在“ frameworks”下:{“ netcoreapp1.1”:{“ dependencies”:{“ Microsoft.NETCore.App”:{“版本”:“ 1.1.0”,“类型”:“平台”}}}}
钕钕

1
谢谢。这两个简单的步骤解决了该问题。希望MS将在不久的将来使其对开发人员更加友好。
EvZ

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": {}
}

再见,平台定义!


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

或者您可以通过删除type: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/zh-cn/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的应用程序的app.exe)和一个.dll文件(例如app.dll),该可执行文件是特定于平台的.NET Core主机的重命名版本。实际应用。


9

就我而言,我刚刚将所有nuget软件包都更新为最新版本,并且nuget将我的“ Microsoft.NETCore.App”软件包引用更改为以下内容:

"Microsoft.NETCore.App": "1.1.0"

我将其更改回以下形式,并且一切正常:

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

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


4

如果执行一个新的dotnet并查看输出项目json,您将看到名称已更改。

对project.json进行如下更改:

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

对我来说,这是最好的解决方案。.NET Core处于不断变化的状态,并且事物一直在变化。使用CLI生成一个project.json来修复您的project.json中的更改,使NuGet PM似乎无法保持一致和更新。
James B

0

我在以下页面的svick注释中找到了一个有用的链接:https : //github.com/dotnet/cli/issues/2442


1
尽管您的答案是100%正确,但如果该链接被移动,更改,合并到另一个链接中或者主站点消失了,它也可能100%无用... :-(因此,请编辑您的答案并复制相关内容从链接到您的答案的所有步骤,从而保证您在本网站使用寿命的100%内获得答案!;-)您始终可以将链接留在答案的底部,作为材料的来源...
唐纳德·德克

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 Core使用的常规模板格式进一步分离逻辑,我会在这里写下来。


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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.