【问题标题】:XamarinAndroid task in Azure DevOps pipeline failing without reasonAzure DevOps 管道中的 XamarinAndroid 任务无故失败
【发布时间】:2020-11-09 15:10:03
【问题描述】:

我有一个适用于 Android 的 Xamarin Forms 应用程序,当我在 VS 中本地构建它时,它运行良好。我也在 Azure DevOps 中建立了一个管道来构建它,但是XamarinAndroid@1 任务一直失败,没有任何实际的错误消息;它只是停止。管道视图中相应的“错误消息”只是“未找到此问题的消息”。之前我什至加了一个VSBuild@1任务,成功编译了所有项目(包括单元测试,都成功了)。

失败的任务本身没什么特别的,非常默认的东西:

- task: XamarinAndroid@1
  inputs:
    projectFile: '**/*droid*.csproj'
    outputDirectory: '$(outputDirectory)'
    configuration: '$(buildConfiguration)'
    jdkOption: 'JDKVersion'

在将间接依赖项添加到另一个库之前,它甚至过去也可以工作,而另一个库又具有一些 NuGet 依赖项。 NuGetToolInstaller@1NuGetCommand@2 在管道开始时也能正常工作,查找、安装和验证所有外部包。如前所述,本地一切正常,即使是普通的 VS 构建任务也可以构建一切。我什至可以在 XamarinAndroid-task 的构建日志中看到新添加的库构建时没有任何错误。只有当它声称要构建我实际的 Xamarin 项目时,它才会默默地死掉。

构建日志的最后几行如下:

...
CoreGenerateAssemblyInfo:
Skipping target "CoreGenerateAssemblyInfo" because all output files are up-to-date with respect to the input files.
CssG:
Skipping target "CssG" because it has no outputs.
CoreCompile:
  C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin\Roslyn\csc.exe /noconfig /unsafe- /checked- [... all the build options in the world ...]
  Using shared compilation with compiler from directory: C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin\Roslyn
XamlC:
  Compiling Xaml, assembly: obj\Release\netstandard2.0\[My Main Xamarin Project].dll
Finishing: XamarinAndroid

任何指向可能是什么问题的指针,在哪里查看(是我的项目、Nuget 依赖项还是管道定义本身?),或者如何至少从中获取错误消息?

【问题讨论】:

  • 您部署了吗 (developer.android.com/studio/run)?最近 TLS 1.0 和 TLS 1.1 已被许多服务器淘汰,您必须使用 TLS 1.2,这需要更新的驱动程序和 Windows 安全更新。
  • 当我在 Visual Studio 中手动构建我的解决方案时,我可以在模拟器上运行它,并且在手动签署 apk 后,我也可以在我的设备上安装和运行该应用程序。我什至没有在我的应用程序中使用任何网络连接,所以这部分不需要任何 TLS,或者您是指管道中某处的 TLS 使用情况?
  • 在问题发生之前您是否在 Android 上构建?在您解决问题之前,我会一直坚持您之前所做的事情。不要添加其他问题。请参阅以下内容:docs.microsoft.com/en-us/ef/core/what-is-new/ef-core-3.0/…。我怀疑您可能正在使用不同网络版本的组合,例如 Core 2.0(使用 Net 2.0)和 Core 3.0(使用 Net 2.1)。
  • 我提到的附加库可能使用了不同的框架,我必须检查一下(不幸的是,我目前无法访问我的电脑)。但是为什么它可以在我本地的 Visual Studio (Win10) 上运行,但在 DevOps 上却失败了(默默地!!)(使用vmImage: 'windows-latest')?
  • 因为两台机器上安装了不同的dll。只有当 Net 的版本在构建和部署机器上相同时,c# 应用程序才能工作。当不同时,发布/部署更新部署机器上的 dll 以匹配构建机器。这就是为什么我说除非您使用旧版本,否则您不应该使用 VSBuild。我将从删除 VSBuild 开始,然后进行另一次部署,看看会发生什么。如果您之前没有使用 VSBuild,那么您正在攻击第二个问题,而不是原始问题。

标签: c# xamarin xamarin.forms xamarin.android azure-devops


【解决方案1】:

因此,在与@jdweng 在 cmets 中进行(半合法 ^^)讨论后,我发现了罪魁祸首:我确实在各种库中使用了不同的框架,这不知何故让管道构建失败。

由于 DevOps 代理作业(据我了解)始终在空白的新虚拟机上运行,​​因此遗留文件不可能成为问题(加上各种取消/检查“干净”选项也没有改变任何东西)。同样重要的是要注意,所有内容都只是纯粹的构建(也就是将 *.sln 文件转换为 *.apk 文件),还没有发生实际部署,显然没有文件在本地和远程机器之间手动交换,因为一切总是从头开始构建。

之前的详细项目结构:

XamarinMainProject           both .Net Standard 2.0
 & XamarinMainProject.Android
'-> ViewModelLibrary              .Net Framework 4.6.1
     '-> OneCodeLibrary           .Net Framework 4.6.1
     '-> TheOtherLibrary          .Net Standard 2.0

有趣的是,当TheOtherLibrary包含在构建中时,一切正常(本地和 DevOps 上)。但是一旦被引用,DevOps Build 如上所述就失败了,而本地一切都按预期进行。

现在我已经将两个 4.6.1 项目重新创建为 .Net Standard 2.0,并且管道也很高兴。

这当然会引发几个问题:

  1. 为什么它可以在本地工作(甚至在带有 VSBuild 任务的 DevOps 上),但在 XamarinAndroid 任务的 DevOps 上却不行?
  2. 更重要的是:为什么根本没有错误消息(更不用说有用的消息了)?
  3. 是否应将此作为错误报告给 Xamarin(如果是,请提供有关在何处执行此操作的任何提示)?

【讨论】:

  • 如果解决了,您可以将自己标记为解决方案。
猜你喜欢
  • 2021-05-10
  • 2022-07-15
  • 2021-08-09
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 2021-07-28
  • 2020-09-17
  • 2020-01-30
相关资源
最近更新 更多