nuget 恢复:调用目标已引发异常

问题描述 投票:0回答:8

当我从命令行运行

nuget restore
时,我得到

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

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

nuget sln-file
8个回答
41
投票

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

要分析问题,请尝试

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

(调用

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

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


14
投票

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

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

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

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


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

6
投票

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


3
投票

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

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

解决方法是手动下载您选择的 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 上的用户。


2
投票

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

请参阅此处了解更多详情: https://github.com/NuGet/Home/issues/6918


1
投票

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

未处理的异常:System.IO.FileNotFoundException:无法加载 文件或程序集“Microsoft.Build.Framework,版本=15.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' 或其之一 依赖关系。该系统找不到指定的文件。在 Microsoft.Build.CommandLine.MSBuildApp.Execute(字符串命令行)
在 Microsoft.Build.CommandLine.MSBuildApp.Main()

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

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

不再有错误。


0
投票

这是因为 Visual Studio 2022 版本中的 NuGet 与构建期间下载的 NuGet 版本不匹配。为了解决这个问题,请在构建过程中下载 NuGet 版本 6.x,因为 Visual Studio 2022 支持版本 6.x 的 NuGet 工具

© www.soinside.com 2019 - 2024. All rights reserved.