当我从命令行运行nuget restore
时,我得到
在 MyProject.sln 解析解决方案文件时出错:调用目标已引发异常。
但从 Visual Studio 恢复 nuget 包运行时没有错误。任何解决方法?
此错误对于具有许多项目的大型解决方案尤其令人沮丧,因为 NuGet 没有提示文件解析失败的时间点。
要分析问题,请尝试msbuild MyProject.sln
;msbuild 的解析器稍微冗长一些。至少它会给你一个行号,所以你会知道在哪里寻找错误。在文本编辑器中打开MyProject.sln
以检查该行。就我而言,它只是一个在手动解决 TFS 合并冲突时意外引入的空白行。
(调用 似乎很明显msbuild
,但在我们的例子中,该调用是一个较大的构建脚本的一部分,nuget restore
它将首先出现,在到达之前中止构建过程msbuild
。)
NuGet 的未来版本应返回更详细的错误消息;见问题#1150。
在检查了我们的源代码控制后,我找到了解决方案。有一个不正确的合并(在 git 中)导致我们的解决方案有 2 个嵌套项目
Project(...) = ...
Project(...) = ...
EndProject
Global
.......
最后一个 EndProject 不见了。有趣的是,即使我们的解决方案文件实际上已损坏,Visual Studio 也没有失败。
在 2 个项目之间添加一个 EndProject 修复了该错误。
我有同样的问题。问题是 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
我的解决方案是将 nuget.exe 更新到最新版本。
我有同样的问题。使用“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 上的所有人。
这也可能在安装 VS 2017 15.7 但未安装 .Net 4.7.2 后发生。
有关更多详细信息,请参见此处: https ://github.com/NuGet/Home/issues/6918
我从我的天蓝色管道中得到了这个错误。我进入构建服务器并运行 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
没有更多的错误。