"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
我正在将项目从 .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