尝试从 Visual Studio 发布天蓝色函数时出错

Posted

技术标签:

【中文标题】尝试从 Visual Studio 发布天蓝色函数时出错【英文标题】:Error when trying to publish an azure function from Visual Studio 【发布时间】:2020-03-31 00:26:10 【问题描述】:

当我尝试使用 Visual Studio 发布我的函数时收到以下错误消息,知道如何解决这个问题吗?

System.AggregateException:发生一个或多个错误。 ---> System.Exception:发布遇到错误。我们无法 确定错误的原因。检查输出日志以获取更多信息 细节。 --- 内部异常堆栈跟踪结束 --- 在 System.Threading.Tasks.Task.ThrowIfExceptional(布尔 includeTaskCanceledExceptions) 在 System.Threading.Tasks.Task.Wait(Int32 毫秒超时, CancellationToken 取消令牌)在 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(任务 任务)在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)在 Microsoft.Publish.Framework.Model.DefaultPublishSteps.d__23.MoveNext() --- 从先前抛出异常的位置结束堆栈跟踪 --- 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务)在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)在 Microsoft.Publish.Framework.ViewModel.ProfileSelectorViewModel.d__213.MoveNext() --->(内部异常 #0)System.Exception:发布遇到错误。我们无法确定错误的原因。检查 输出日志以获取更多详细信息。

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

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

【问题讨论】:

我目前在 Visual Studio 2019 中遇到similar issue - 尽管我正在尝试发布到文件夹中。我仍在尝试找出导致此问题的原因,但到目前为止我已经尝试过:1.)清除 NuGet 缓存,2.)删除 bin 和 obj 文件夹 3.)创建一个新的文件夹配置文件另外,您在输出日志文件中看到了什么?有什么好用的吗? 你有没有试过通过Deployment Center 通过Git部署它 如果以下任何建议不起作用。重启 VS2019 并重新构建,发布。 【参考方案1】:

你可以试试this

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

【讨论】:

这对我有用。我不确定它是否与在进行环境更改时“重新启动”Azure 函数有关,或者它是否是阻塞配置。【参考方案2】:

这是一个 Visual Studio 超时问题,这意味着您的代码和其他一些设置不是问题的关键。出现此错误的原因是 Visual 对发布设置了超时限制。 (文件太大或网速不稳定)

如果你的部署项目不是太大,可以等到网速稳定后再尝试运行。当然你也可以尝试其他的部署方式来避免这个问题,比如zip deploy。

【讨论】:

我已经使用 zipdeploy 成功部署了它。但是,当我查看App内容时,它是更新的,但是当我运行该功能时,它似乎在运行旧版本? @Recusiwe “运行旧版本”是什么意思?你的意思是azure函数的版本变了?zip deploy解决了这个问题吗? “旧版本”是指我能够从 VS 发布的最后一个版本,而不是 zip 部署的版本。应用程序内容包含来自已部署 zip 的代码,但它不会运行它。它运行旧版本。 @Recusiwe 您现在使用的是哪个功能版本?您现在使用的是哪个 IDE?你项目的组装是什么?(.csproj 文件)我之前遇到过类似的错误,那次似乎是组装问题。有时这个错误只出现在 Visual Studio 2019 中。你可以尝试使用 Visual Studio 2017 看看这个异常是否仍然存在。如果您使用的是 Visual Studio 2017,您是否使用 Resharper?我正在尝试重现您的错误并遇到类似的错误,但我不确定这与您的情况有关。 Function app v. 2 和 Visual Studio 16.4.1【参考方案3】:

我遇到了同样奇怪的问题 - 这是由我的代码中的错误引起的 -

我的代码中有#if DEBUG #else #if 语句,因此在我的计算机上调试工作正常,但发布(使用发布配置文件)失败。

单击“输出”选项卡,您应该会看到真正的问题。

【讨论】:

【参考方案4】:

以上都不适合我。所以我只是重新下载了发布配置文件并将其导入 VS,它就可以工作了。

很奇怪,但以防万一上述方法都不适合您。值得一试。

【讨论】:

【参考方案5】:

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

【讨论】:

是的,我刚刚更新了VS,它工作了【参考方案6】:

我找到了一种解决方法,因为这些方法都不适合我。有点奇怪,请耐心等待。

    将函数发布到 azure 等待失败 转到 Azure 门户/所有资源 查找失败的已发布函数应用 在函数内点击“函数”..

    点击刷新 再次发布.. 这次成功了。

就是这样..

【讨论】:

【参考方案7】:

删除包部署有时会像@Sajeetharan 建议的那样工作,但并非总是如此。

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

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

【讨论】:

【参考方案8】:

如果不在 GitHub 之类的 playform 上共享您的项目,我们真的很难提供具体建议,因为变量太多,NuGET 包和引用的组合太多,您的项目可能会以这样的方式发生冲突会导致这个错误。

尤其是使用 v2 Functions,我曾多次遇到此问题或类似问题。函数的最大因素之一是 v1 和 v2 之间的竞争概念。

当您使用 Visual Studio 发布向导在 Azure 中创建目标资源时,它往往会取得更大的成功,如果您已经为此苦苦挣扎了一段时间,我建议您遵循此过程,作为概念证明(如果没有的话)其他:

此建议在 VS2017 和 2019 中同样适用

    在 Visual Studio 中使用相同的解决方案创建一个新的函数项目。 复制原始函数的名称 将函数发布到 Azure 资源,使用发布向导创建此资源。 如果发布成功: 将原始项目代码移至新项目 密切关注您要引入的 nuget 包的版本,它们及其依赖项需要符合 v2 标准 如果发布成功 确保将 Visual Studio 升级到最新版本 确保您的 Azure 工具也升级到最新版本

作为一般经验法则,要获得 Azure Functions 的普遍成功:

    将 v1 用于 .Net Framework 项目,或者如果您的 ANY 参考项目或 NuGET 包具有 .Net Fx 依赖项。 (所以 .Net 4+... 或任何不是 .Net Core 的东西。)

    即使这些依赖项针对多个项目,函数部署也会失败,因为在部署期间评估 NuGET 依赖项时无法正确检测到正确的平台。

    .Net Core 项目使用 v2,确保您的引用也只是 .Net core

以增量方式编译和发布您的代码,还可以使用 AzureDevOps 或 GitHub 或其他源代码存储库来经常使用 Functions 签入您的代码。在 Functions 项目的早期阶段,我们经常引入多个引用和 NuGET 包,它们似乎可以在本地工作,但在我们部署时却不行。

使用源代码存储库可以在安装新包之前轻松提交更改,并在安装包导致无法部署的代码时回滚。 看起来很乱,但是由于 NuGet 版本控制,回到安装包之前的状态并不像卸载那个包那么简单,它可能很容易升级其他包,并且在这个不断变化的 Azure 环境中,许多包作者选择了在 .Net Framework 和 .Net Core 之间升级他们的资源,但他们并不总是做得很好,或者有时会保留一些会导致 Azure Functions 冲突的 .Net 框架元素。

有一些有趣的讨论可能会有所帮助:

Azure Functions runtime versions overview Question about Azure Functions v2 plans and v1 support Azure Functions - v2 support and v1 lifetime

【讨论】:

【参考方案9】:

默认超时为 100 秒。所以 100 秒后发布失败。 上传 blob 时,我在自己的代码中遇到了同样的问题,这就是我将其修复为 5 分钟的方法。因此,Visual Studio 的相同代码可以修复它。

_client.Timeout = TimeSpan.FromMinutes(5);
CancellationTokenSource source = new CancellationTokenSource(TimeSpan.FromMinutes(5));
CancellationToken token = source.Token;
HttpResponseMessage responseMessage = await _client.PostAsync(url, content, token);

【讨论】:

【参考方案10】:

我安装了最新的 .NET Core (5.0) 并将我的项目升级为面向 .NET Core 5.0。当我试图发布我的项目时,我遇到了这个错误。我忘记在发布窗口中将“目标框架”更改为“net5.0”。

【讨论】:

【参考方案11】:

删除 WEBSITE_RUN_FROM_PACKAGE 大多数时候对我有用。 但有时,它不起作用.. 这里有几件事,我在发布之前会确认一下。

    Azure CLI 窗口不应打开。 转到文件--> 帐户设置。确保您已登录。 在管理员模式下使用 Visual Studio。 删除发布配置文件并重新创建。

【讨论】:

【参考方案12】:

我在带有黄色标志的服务依赖项列表中获得了 Application Insights。由于我不使用此工具,因此我将其删除并修复了我的发布问题。

【讨论】:

【参考方案13】:

如果您使用的是 Visual Studio 2022

github 上有一个记录在案的错误

解决方案

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>

【讨论】:

【参考方案14】:

我有同样的问题

但是,它说没有失败日志

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 次并重新启动后不得不再次重建项目,并且它工作正常。

可能是服务器速度较慢或互联网连接。

【讨论】:

【参考方案15】:

我删除了发布配置文件,然后重新安装它并且它工作。

【讨论】:

以上是关于尝试从 Visual Studio 发布天蓝色函数时出错的主要内容,如果未能解决你的问题,请参考以下文章

从文件填充数组时,Visual Studio 中止

如何通过 Visual Studio 修复功能应用发布中的错误

尝试通过 c++ 程序中的 system() 函数使用 cl Visual Studio 命令进行命令行构建时出现 vcvars32.bat 问题

Visual Studio Code 无法识别 EJS

Visual Studio - WinForms - 在右侧添加面板

从 C (Visual Studio) 调用 C++ 类成员函数