"unknown keyword platform" 在 Visual Studio 恢复时

"unknown keyword platform" when restoring in Visual Studio

我正在将项目从 .NET Core RC1 转换为 RC2。我已经安装了 Visual Studio 工具预览包并将 VS Nuget 插件更新到最新版本。

这是一个测试项目,所以我需要根据 library guide 添加 Microsoft.NETCore.App 到我的 project.json。它看起来像这样:

{
  "dependencies": {
    "dotnet-test-xunit": "1.0.0-rc2-build10015",
    "FluentAssertions": "4.2.1",
    "Microsoft.Extensions.PlatformAbstractions": "1.0.0-rc2-final",
    "Microsoft.NETCore.App": {
      "type": "platform",
      "version": "1.0.0-rc2-3002702"
    },
    "xunit": "2.1.0"
  },
  "frameworks": {
    "netcoreapp1.0": {
      "imports": [ "dotnet", "portable-net45+win8" ]
    }
  },
  "testRunner": "xunit",
}

项目在命令行上恢复和构建 (dotnet restore/build)。但是,当 Visual Studio 尝试恢复包时,出现此错误:

PATH=.\node_modules\.bin;C:\Program Files (x86)\Microsoft Visual Studio 14.0\Web\External;%PATH%;C:\Program Files (x86)\Microsoft Visual Studio 14.0\Web\External\git
C:\Users\Nate\.dnx\runtimes\dnx-clr-win-x86.1.0.0-rc2-20221\bin\dnx.exe "C:\Users\Nate\.dnx\runtimes\dnx-clr-win-x86.1.0.0-rc2-20221\bin\lib\Microsoft.Dnx.Tooling\Microsoft.Dnx.Tooling.dll" restore "C:\Users\Nate\Documents\stormpath-dotnet-config\test\Stormpath.Configuration.Test"
Microsoft .NET Development Utility Clr-x86-1.0.0-rc2-20221
  CACHE https://api.nuget.org/v3/index.json
Restoring packages for C:\Users\Nate\Documents\stormpath-dotnet-config\test\Stormpath.Configuration.Test\project.json
----------
C:\Users\Nate\Documents\stormpath-dotnet-config\test\Stormpath.Configuration.Test\project.json(0,0): Error: Microsoft.Dnx.Runtime.FileFormatException: unknown keyword platform ---> System.InvalidOperationException: unknown keyword platform
   at Microsoft.Dnx.Runtime.LibraryDependencyType.Parse(String keyword)
   at Microsoft.Dnx.Runtime.ProjectReader.PopulateDependencies(String projectPath, IList`1 results, JsonObject settings, String propertyName, Boolean isGacOrFrameworkReference)
   at Microsoft.Dnx.Runtime.ProjectReader.ReadProject(Stream stream, String projectName, String projectPath, ICollection`1 diagnostics)
   at Microsoft.Dnx.Runtime.Project.TryGetProject(String path, Project& project, ICollection`1 diagnostics)
   --- End of inner exception stack trace ---
   at Microsoft.Dnx.Runtime.Project.TryGetProject(String path, Project& project, ICollection`1 diagnostics)
   at Microsoft.Dnx.Tooling.RestoreCommand.<RestoreForProject>d__69.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.Dnx.Tooling.RestoreCommand.<>c__DisplayClass68_0.<<Execute>b__2>d.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task)
   at Microsoft.Dnx.Tooling.RestoreCommand.<Execute>d__68.MoveNext()
----------
Restore failed
unknown keyword platform
NuGet Config files used:
    C:\ProgramData\NuGet\Config\Microsoft.VisualStudio.Offline.config
    C:\Users\Nate\AppData\Roaming\NuGet\nuget.config
Feeds used:
    https://api.nuget.org/v3-flatcontainer/
    C:\Users\Nate\Documents\LocalNuget
    C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\

显然 "type": "platform" 属性 正在放弃它,但这不应该与最新的工具版本一起使用吗?

Tl;dr - 将 global.json 更新或替换为下面的 version 值。

此外,确保 NuGet 是 updated。 (感谢您的提示,gigi!)

此错误是由 global.json 中的旧工具版本引起的。如果该值没有更新(迁移项目时容易遗漏),即使安装了最新的工具也会莫名其妙地抛出这个错误。

对于 RC1 时代的项目,您的 global.json 可能看起来像这样:

{
  "projects": [ "src", "test" ],
  "sdk": {
    "version": "1.0.0-rc1-update1"
  }
}

对于 .NET Core 1.0 RTM,它应该如下所示:

{
  "projects": [ "src", "test" ],
  "sdk": {
    "version": "1.0.0-preview2-003121"
  }
}

棘手的部分是即使 version: 1.0.0-rc2-20221 也不会 工作! version: 1.0.0-preview2-003121 是目前的正确值。上面的 global.json 文件将使用 Visual Studio 和 dotnet build/dotnet run.

恢复和编译

添加以下代码一定会解决您的问题。我遇到了这个错误并遇到了这个问题,但上面的答案确实适合我的情况,所以我添加了另一个对我有帮助的答案 -

请参阅在我的例子中,我们需要添加 EntityFrameworkCore.Tools 和 EntityFrameworkCore.Designin project.json 需要在项目中添加的代码。json

{
    "dependencies": {
        "Microsoft.EntityFrameworkCore.Design": {
            "version": "1.0.0-*",
            "type": "build"
        }
    },
    "tools": {
        "Microsoft.EntityFrameworkCore.Tools": "1.0.0-*"
    }
}

以下是可能对您有所帮助的第二个更改

"frameworks": {
    "netcoreapp1.0": {
      "imports": [
        "dnx451",
        "portable-net45+win8"
      ]
    }
  },

尝试上述步骤后,问题仍未解决。然后我发现要手动安装.NET Core - .NET Core runtime and framework (https://github.com/dotnet/cli) .

安装后,问题得到解决,确保映射 node.js 路径 tools->option->projects and solutions->External web tools