nuget restore:异常已被调用的目标抛出

nuget restore: Exception has been thrown by the target of an invocation

当我从命令行 运行 nuget restore 时,我得到

Error parsing solution file at MyProject.sln: Exception has been thrown by the target of an invocation.

但是从 Visual Studio 运行 中恢复 nuget 包没有错误。有什么解决方法吗?

我在检查我们的源代码管理后找到了解决方案。合并不正确(在 git 中)导致我们的解决方案有 2 个嵌套项目

Project(...) = ...
Project(...) = ...
EndProject
Global
.......

最后一个 EndProject 丢失了。有趣的是,即使我们的解决方案文件实际上已损坏,Visual Studio 也没有失败。

在 2 个项目之间添加 EndProject 修复了错误。

对于包含许多项目的大型解决方案,此错误尤其令人沮丧,因为 NuGet 没有提示文件解析在哪个点失败。

分析问题,试试msbuild MyProject.sln; msbuild 的解析器稍微冗长一些。至少它会给你一个行号,所以你会知道在哪里寻找错误。在文本编辑器中打开 MyProject.sln 以检查该行。就我而言,这只是在手动解决 TFS 合并冲突时意外引入的空白行。

(调用 msbuild 似乎很明显,但在我们的例子中,该调用是更大的构建脚本的一部分,其中 nuget restore 将首先出现,在 [= 之前​​中止构建过程已达到 12=]。)

NuGet 的未来版本应该 return 更详细的错误消息;参见 issue #1150

我有同样的问题。问题是 sln 文件有相同的空行。我删除了线条。它解决了

前题

//Blank Line
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.27130.2010
MinimumVisualStudioVersion = 10.0.40219.1

    GlobalSection(ProjectConfigurationPlatforms) = postSolution
        {658E5ED2-A01E-41DD-A952-F5EDE9E4AEE0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {658E5ED2-A01E-41DD-A952-F5EDE9E4AEE0}.Debug|Any CPU.Build.0 = Debug|Any CPU

        {658E5ED2-A01E-41DD-A952-F5EDE9E4AEE0}.Prod|Any CPU.ActiveCfg = Prod|Any CPU
        {658E5ED2-A01E-41DD-A952-F5EDE9E4AEE0}.Prod|Any CPU.Build.0 = Prod|Any CPU
    EndGlobalSection

固定版本

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.27130.2010
MinimumVisualStudioVersion = 10.0.40219.1

    GlobalSection(ProjectConfigurationPlatforms) = postSolution
        {658E5ED2-A01E-41DD-A952-F5EDE9E4AEE0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {658E5ED2-A01E-41DD-A952-F5EDE9E4AEE0}.Debug|Any CPU.Build.0 = Debug|Any 
        {658E5ED2-A01E-41DD-A952-F5EDE9E4AEE0}.Prod|Any CPU.ActiveCfg = Prod|Any CPU
        {658E5ED2-A01E-41DD-A952-F5EDE9E4AEE0}.Prod|Any CPU.Build.0 = Prod|Any CPU
    EndGlobalSection

安装 VS 2017 15.7 但未安装 .Net 4.7.2 后也可能发生这种情况。

详情请看这里: https://github.com/NuGet/Home/issues/6918

我的解决方案是将 nuget.exe 更新到最新版本。

我遇到了同样的问题。使用 "Nuget restore" 任务时,这发生在我们的 CI-server (TFS 2018) 上。显然,构建代理使用的是旧版本的 nuget (4.1),它无法读取 Visual Studio 2019 解决方案文件 (sln and/or csproj),导致 @sashoalm 指示的错误。

Microsoft 的回答是使用任务 "Nuget Tool Installer" 但这在我所支持的企业代理墙后面不起作用。从我读到的内容来看,人们很难做到这一点。根据 Microsoft 的说法,他们已经解决了这个 仅在 Azure Devops Server 2019 中对 "Nuget tool installer" 任务的更新。

解决方法是手动下载您选择的 nuget.exe 并将其复制到构建代理。然后,将您的 "Nuget" 任务替换为 "Powershell" 任务并执行

Write-Host "Restoring packages"
Write-Host "Using nuget.exe at" $(nugetexepath)
$(nugetexepath) restore [PATH_TO_SLN_FILE] -Verbosity Detailed -NonInteractive

我添加了一个变量

nugetexepath

在构建配置中也是如此。

也许这会在 Microsoft 的未来更新中得到解决,以帮助所有仍在 TFS 2018 而不是 Azure Devops Server 2019 的人。

我从 Azure 管道中收到此错误。我进入了构建服务器 & 运行 msbuild mysolution.sln。这揭示了一个不同的错误:

Unhandled Exception: System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.Build.Framework, Version=15.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified. at Microsoft.Build.CommandLine.MSBuildApp.Execute(String commandLine)
at Microsoft.Build.CommandLine.MSBuildApp.Main()

那时我发现我找到了这个答案 & 认为我需要更新 nuget,所以我在管道中为 NuGet Installer 任务添加了一个步骤,并将其设置为使用更新的版本。

https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/tool/nuget?view=azure-devops

没有更多错误。