【问题标题】:Unable to extract .NET Single File Application in Azure DevOps release pipeline无法在 Azure DevOps 发布管道中提取 .NET 单文件应用程序
【发布时间】:2021-10-28 20:34:18
【问题描述】:

我确实使用 C# 创建了一个单文件应用程序。我有这个可执行文件位于存储库中,并将其作为工件推送。前者用于构建管道,我只需添加 repo 即可使用它。后者是将其用作发布管道的工件。

现在,在构建管道期间,我可以简单地使用它,对其进行测试并且它可以工作。不是很重要,但应用程序做了两件事,它发送邮件和更新工作项。

在发布管道中使用完全相同的应用程序时,我收到以下错误:

无法提取应用程序包的内容。
写入提取文件时 I/O 失败。

我不确定,但这可能与在容器化环境中运行的发布管道代理有关吗?我之所以这么问是因为其他人在 AWS 上使用这种方法和容器时遇到了这样的问题,请参阅Reddit link

[更新]
发布管道在自托管的 Azure DevOps 代理上运行。安装它的环境没有安装 .NET 5 运行时或 SDK。但我希望单文件应用程序也包含运行时,还是我错了?

【问题讨论】:

  • .NET 5 的确切版本是什么?错误来自这里:github.com/dotnet/runtime/blob/…。该错误信息表示fwrite 函数失败,这通常意味着系统无法将文件写入磁盘。你能告诉我们更多关于容器内$HOME 使用的文件系统吗?您可以尝试将环境变量DOTNET_BUNDLE_EXTRACT_BASE_DIR 设置为容器内的其他位置吗?
  • @omajid 它没有在容器上运行。发布此问题时,我也确实错过了一些信息。它在自托管代理上运行。在代理上没有为 .NET 5 安装运行时,不知道这是否导致了错误?尽管未安装运行时,但应该期望单个文件应用程序能够运行(它包含对吗?)

标签: c# .net azure-devops azure-pipelines-release-pipeline .net-core-publishsinglefile


【解决方案1】:

我确实将我的应用程序发布为一个简单的文件夹发布。然后将所有文件放在 Azure DevOps 存储库的发布文件夹中。
接下来,我将所有这些文件作为带有构建管道的工件推送,必须在环境中安装 .NET 5 当前运行时,因为发布管道在自托管代理上运行,然后我才能运行应用程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-28
    • 1970-01-01
    • 2021-01-30
    相关资源
    最近更新 更多