24

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

在 MyProject.sln 解析解决方案文件时出错:调用目标已引发异常。

但从 Visual Studio 恢复 nuget 包运行时没有错误。任何解决方法?

4

7 回答 7

40

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

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

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

NuGet 的未来版本应返回更详细的错误消息;见问题#1150

于 2017-09-05T13:25:23.333 回答
14

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

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

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

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

于 2017-07-14T10:22:03.763 回答
11

我有同样的问题。问题是 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
于 2018-03-30T09:22:56.233 回答
6

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

于 2020-03-19T14:35:24.037 回答
3

我有同样的问题。使用“Nuget restore”任务时,这发生在我们的 CI 服务器(TFS 2018)上。显然,构建代理使用的是旧版本的 nuget(4.1),并且在读取 Visual Studio 2019 解决方案文件(sln 和/或 csproj)时遇到了问题,从而导致了 @sashoalm 指示的错误。

微软的答案是使用“Nuget Tool Installer”任务,但这在我落后的企业代理墙后面不起作用。从我所读到的内容来看,人们对此感到很难过。据微软称,他们已经解决了这个问题,仅在 Azure Devops Server 2019 中更新了“Nuget 工具安装程序”任务。

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

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 上的所有人。

于 2020-04-17T10:34:04.897 回答
2

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

有关更多详细信息,请参见此处: https ://github.com/NuGet/Home/issues/6918

于 2018-05-21T15:16:53.860 回答
1

我从我的天蓝色管道中得到了这个错误。我进入构建服务器并运行 msbuild mysolution.sln。这揭示了一个不同的错误:

未处理的异常:System.IO.FileNotFoundException:无法加载文件或程序集“Microsoft.Build.Framework,Version=15.1.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a”或其依赖项之一。该系统找不到指定的文件。在 Microsoft.Build.CommandLine.MSBuildApp.Execute(String commandLine)
在 Microsoft.Build.CommandLine.MSBuildApp.Main()

就在那时我发现我找到了这个答案 无法加载文件或程序集 'Microsoft.Build.Framework'(VS 2017) 并认为我需要更新 nuget,所以我在管道中添加了 NuGet 安装程序任务的步骤并设置它使用较新的版本。

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

没有更多的错误。

于 2021-10-21T20:38:05.010 回答