Azure DevOps管道中的XamarinAndroid任务无故失败

时间:2020-07-20 11:13:42

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

我有一个适用于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任务的构建日志中看到新添加的库的构建没有任何错误。只有当它声称要构建我的实际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依赖项还是管道定义本身?),或者至少如何从中得到错误消息?

1 个答案:

答案 0 :(得分:0)

因此,在@jdweng注释中的(半合法^^)讨论之后,我找到了罪魁祸首:我确实在各个库中使用了不同的框架,这在某种程度上使管道构建失败。

由于(据我所知)DevOps代理程序作业始终在空白的新VM上运行,因此旧文件也不会成为问题(加上对“清除”选项的各种取消/检查也没有任何改变)。还需要注意的是,所有内容仅与纯建筑有关(也就是将* .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(如果是,则提示在哪里进行操作)?