【问题标题】:Error when trying to publish an azure function from Visual Studio尝试从 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 并重新构建,发布。

标签: visual-studio azure azure-functions


【解决方案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】:

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

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

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

      就是这样..

      【讨论】:

        【解决方案7】:

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

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

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

        【讨论】:

          【解决方案8】:

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

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

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

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

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

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

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

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

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

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

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

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

          【讨论】:

            【解决方案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 大多数时候对我有用。 但有时,它不起作用.. 这里有几件事,我在发布之前会确认一下。

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

                【讨论】:

                  【解决方案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】:

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

                        【讨论】:

                          猜你喜欢
                          • 2021-06-12
                          • 1970-01-01
                          • 1970-01-01
                          • 2018-02-02
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 2015-05-04
                          相关资源
                          最近更新 更多