从Visual Studio发布Azure函数时遇到错误

33
当我尝试使用Visual Studio发布我的函数时,出现以下错误信息,请问如何解决?

System.AggregateException:发生了一个或多个错误。---> System.Exception:发布遇到错误。我们无法确定错误的原因。请检查输出日志以获取更多详细信息。 ---内部异常堆栈跟踪的结尾---在 System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions) at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken) at Microsoft.Publish.Framework.Model.DefaultPublishSteps.<>c__DisplayClass26_0.b__2() 在 System.Threading.Tasks.Task`1.InnerInvoke() 在 System.Threading.Tasks.Task.Execute() ---前一个位置引发异常的堆栈跟踪的结尾---在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 在 Microsoft.Publish.Framework.Model.DefaultPublishSteps.d__23.MoveNext() ---前一个位置引发异常的堆栈跟踪的结尾---在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 在 Microsoft.Publish.Framework.ViewModel.ProfileSelectorViewModel.d__213.MoveNext()

(内部异常#0)System.Exception:发布遇到错误。我们无法确定错误的原因。检查输出日志获取更多详细信息。 <---

System.Exception:发布遇到错误。我们无法确定错误的原因。检查输出日志获取更多详细信息。

===================


我目前在Visual Studio 2019中遇到了类似的问题,尽管我正在尝试将其发布到文件夹中。我仍在努力查找是什么原因导致了这个问题,但迄今为止我已经尝试了以下内容:1.) 清除NuGet缓存,2.) 删除bin和obj文件夹,3.) 创建了一个新的文件夹配置文件。另外,请问您在输出日志文件中看到了什么有用的信息吗? - VirtualValentin
你尝试通过 部署中心 通过 Git 部署它了吗? - pavle
如果以下任何建议都不起作用,请重新启动VS2019并重新构建、发布。 - Emil
23个回答

20

你可以尝试这个

从Azure门户中的Azure函数应用程序设置中完全删除WEBSITE_RUN_FROM_PACKAGE设置。


2
这对我有用。我不确定它是否与在更改环境时“重新启动”Azure函数或阻止配置有关。 - Justin Neff
1
在我的情况下,我将已连接的 Azure 帐户(或配置文件)从 Visual Studio 中删除,然后重新添加。这对我起作用了,我能够发布我的 Azure 函数。 - Muhammad Zeeshan Tahir
Justin Neff 提醒我,你应该尝试的第一件事是关闭然后重新打开解决方案。VS 发布功能拒绝识别新引用,所以我尝试了“关闭再打开”,当然成功了。 - fartwhif

12

由于其中任何一项都对我无效,因此我找到了一个解决方法。这有点奇怪,请耐心等待。

  1. 将函数发布到 Azure
  2. 等待失败 输入图像描述
  3. 进入 Azure 门户/所有资源
  4. 找到已失败的函数应用程序
  5. 单击 "函数".. 在函数内部

输入图像描述

  1. 单击刷新
  2. 再次发布.. 这次会成功。

就是这样。


2
这对我起作用了,不知道为什么,但是有效。 - Kunal Mukherjee
只是真正的魔法! - Adam Jachocki
一样的,就这么做。 - Konrad
非常奇怪,但这对我也起作用了。如果还有人遇到这个问题,我强烈建议尝试一下。特别是考虑到这只需要几个点击。 - mharre
对我来说也起作用了,因为在应用程序设置中没有找到WEBSITE_RUN_FROM_PACKAGE。简直像是黑魔法一样。 - cognophile
这是我遇到的最奇怪的解决方案,但却起了作用。 - imran chowdhury

9
这是一个Visual Studio超时问题,这意味着您的代码和其他设置并不是问题的关键。此错误发生是因为Visual在发布时设置了超时限制。(文件太大或网络速度不稳定)
如果您的部署项目不太大,可以等待网络速度稳定后再尝试运行它。当然,您也可以尝试其他部署方法来避免此问题,例如zip deploy

我已经成功使用zipdeploy部署它。然而,当我检查应用程序内容时,它已经更新,但是当我运行函数时,似乎运行的是旧版本? - Recusiwe
@Recusiwe "运行旧版本" 是什么意思?你是否意味着 Azure 函数的版本已更改?zip 部署是否解决了这个问题? - Cindy Pau
“旧版本”是指我能够从VS发布的最后一个版本,而不是zip部署的版本。应用程序内容包含来自部署zip的代码,但它不运行它。它运行旧版本。 - Recusiwe
@Recusiwe,你现在使用的是哪个函数版本?你现在使用的是哪个IDE?以及你项目的程序集是什么?(.csproj文件)我之前也遇到过类似的错误,那时候看起来像是一个程序集的问题。有时这个错误只会在Visual Studio 2019中出现。你可以尝试使用Visual Studio 2017来查看是否仍然存在此异常。如果你正在使用Visual Studio 2017,你是否使用了Resharper?我正在尝试重现你的错误并遇到了类似的错误,但我不确定这是否与你的情况有关。 - Cindy Pau
函数应用程序 v.2 和 Visual Studio 16.4.1 - Recusiwe

5

以上方法均未对我起作用。于是我重新下载了发布配置文件,并将其导入到VS中,它就奏效了。

很奇怪,但如果以上方法都没有起作用的话,值得一试。


5

我曾经遇到过同样奇怪的问题 - 它是由我的代码中的错误引起的 -

我的代码中有一个#if DEBUG #else #if语句,因此在我的计算机上进行调试时可以工作,但是发布(使用Release配置文件)会失败。

单击"输出"选项卡,您应该能看到真正的问题所在。


4

我遇到了相同的问题

I had the same issue

但是,它没有任何失败日志

Web App was published successfully https://xxxxxxxxx/
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
========== Publish: 1 succeeded, 0 failed, 0 skipped ==========

我有Visual Studio 2022,我更新了它并不得不重新构建项目,在大约5或6次尝试和重启后,它终于成功了。可能是服务器慢或者网络连接不稳定导致的。

4

我删除了发布配置文件,然后重新安装它,就可以正常工作了。


这是对我有效的方法(在尝试或调查了许多早于2021年9月的其他答案后)。我想知道将本地项目从一个文件夹移动到另一个文件夹是否会导致问题,不确定。在Visual Studio 2022发布对话框中,使用“更多操作”下拉菜单并从中选择“删除”。我首先尝试了还原,重新登录我的Azure帐户,似乎有所改变,但最终仍然出现了相同的错误。删除然后重新添加(这很容易;我不需要重新添加很多信息)起作用了。 - StackOverflowUser

2

如果您正在使用Visual Studio 2022

GitHub上有一个已记录的错误。

enter image description here

解决方案

1. 导航至:

C:\Users\{{USER}}\.nuget\packages\microsoft.azure.webjobs.script.extensionsmetadatagenerator\{{LATEST VERSION}}\build

2. 编辑文件:Microsoft.Azure.WebJobs.Script.ExtensionsMetadataGenerator.targets

3. 在文件中查找:_GenerateFunctionsExtensionsMetadataPostPublish

<Target Name="_GenerateFunctionsExtensionsMetadataPostPublish" AfterTargets="Publish"> <GenerateFunctionsExtensionsMetadata SourcePath="$(PublishDir)bin" OutputPath="$(PublishDir)bin"/> </Target>

将其改为:- 在$(PublishDir)之后删除“bin”。
<Target Name="_GenerateFunctionsExtensionsMetadataPostPublish" AfterTargets="Publish"> <GenerateFunctionsExtensionsMetadata SourcePath="$(PublishDir)" OutputPath="$(PublishDir)"/> </Target>

1
这绝对是一个已记录的 Bug,但似乎是解决错误的答案:“路径 C:{PROJECTDIR}obj\Release\netstandard2.0\PubTmp\Out\bin 不存在。” 我认为许多人在找到这个 StackOverflow 问题时都是因为出现了匹配的错误:“System.Exception:发布遇到错误。我们无法确定错误的原因。请检查输出日志以获取更多详细信息。” - StackOverflowUser

2

有时像@Sajeetharan建议的那样删除软件包会起作用,但并非总是如此。

你应该先在门户上停止主机。然后从VS发布,这对我有用。最后重新启动主机。

不知道为什么现在需要手动重启,可能是因为有一个持久任务正在运行,导致自动重启被阻止。


1
解决方案是更新到最新的 SDK。

是的,我刚刚更新了VS,它可以工作了。 - Bashar Abu Shamaa
对我来说也是一样的,尝试了其他所有方法,只有在更新了VS之后才得以解决。 - coder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接