【问题标题】:How to create a YAML build pipeline in azure devops for xamarin projects with referenced dot net projects如何在 azure devops 中为带有引用的 dot net 项目的 xamarin 项目创建 YAML 构建管道
【发布时间】:2019-09-24 11:30:48
【问题描述】:

我最近将我的资源转移到 azure devOps 以使用 cd/ci 和所有其他很酷的东西。 现在我创建了我的第一个构建管道来构建我的 Xamarin 项目的 android 部分。但我最终收到一条错误消息,找不到引用项目的资源,我将进行包还原并重试。 现在,由于我有 azure 托管的构建代理而不是自托管的,所以在构建之前我无法正确设置代理。 但我想应该有一些方法来正确配置构建管道来完成所有必要的事情。 只是我不知道应该在我的 yaml 文件中添加什么来修复这些东西。

这是我收到的错误消息:

##[error]C:\Program Files\dotnet\sdk\2.2.105\Sdks\Microsoft.NET.Sdk\targets\Microsoft.PackageDependencyResolution.targets(208,5): Error NETSDK1004: Assets file 'd:\a\1\s\*****\*****\*****\*****\obj\project.assets.json' not found. Run a NuGet package restore to generate this file.

问题是,这个文件应该是通过编译引用的项目生成的,而不是 nuget 包的一部分。

这是我自己想出来的构建管道。

# Xamarin.Android
# Build a Xamarin.Android project.
# Add steps that test, sign, and distribute an app, save build artifacts, and more:
# https://docs.microsoft.com/azure/devops/pipelines/languages/xamarin

trigger:
- Share/main

pool:
  vmImage: 'VS2017-Win2016'

variables:
  buildConfiguration: 'Debug'
  outputDirectory: '$(build.binariesDirectory)/$(buildConfiguration)'

steps:
- task: NuGetToolInstaller@1
  inputs:
    versionSpec: 5.1.0

- task: NuGetCommand@2
  displayName: 'Restore NuGet Packages'
  inputs:
    command: restore
    restoreSolution: '**/*.sln'    

- task: XamarinAndroid@1
  inputs:    
    projectFile: 'Mobile4/Droid/Mobile4.Droid.csproj'
    outputDirectory: '$(outputDirectory)'
    configuration: '$(buildConfiguration)'

- task: AndroidSigning@3
  inputs: 
    apksign: false
    zipalign: false
    apkFiles: '$(outputDirectory)/*.apk'

- task: PublishBuildArtifacts@1
  inputs:
      pathtoPublish: '$(outputDirectory)'

构建总是在 XamarinAndroid 步骤上中断

我希望你能帮助我。 解决方案必须在某个地方,我现在看不到它。 提前谢谢。 小牛

【问题讨论】:

  • “命令:恢复”的目的是什么?当您使用 macOS 最新的 vmImage 时,它​​是否有效?另外,您能否分享一下您的解决方案的文件结构?你也尝试添加#clean:true
  • 根据报错信息,这是一个.netcore项目,使用的SDK是2.2.105。文件“obj\project.assets.json”取决于包还原。所以,根本原因是你的包恢复方法不正确,那么文件“project.assets.json”没有恢复成功。在您的 YAML 中,您使用的包还原任务是 Nuget 还原任务,nuget restore 无法还原 .netcore 项目的文件“project.assets.json”。你应该使用dotnet restore
  • 我想我可能必须告诉管道所有必要的包所在的位置,但我认为这应该都在项目文件中,分别在解决方案文件中?尝试在本地构建时,我没有任何问题。
  • @Maverick1st 告诉 nuget.config 文件中的包位置。对于 pipeline,包还原过程基于 nuget.config 的配置。

标签: azure xamarin xamarin.android azure-devops azure-pipelines


【解决方案1】:

[错误]C:\Program Files\dotnet\sdk\2.2.105\Sdks\Microsoft.NET.Sdk\targets\Microsoft.PackageDependencyResolution.targets(208,5): 错误 NETSDK1004:资产文件 'd:\a\1\s********************\obj\project.assets.json' 未找到。 运行 NuGet 包还原以生成此文件。

根据这个错误信息,项目是.NetCore,使用的SDK是2.2.105。对于文件“....\obj\project.assets.json”,project.assets.json 是否存在由包还原步骤确定。现在提示找不到,说明包还原没有成功还原这个文件。

正如我之前提到的,它是一个 .NetCore 项目。所以你应该使用dotnet restore 而不是nuget restore。对于.NetCore项目,nuget restore恢复的obj文件夹中不包含project.assets.json

因此,要解决您遇到的问题,您应该将 Nuget restore 任务替换为 dotnet restoredotnet

- task: DotNetCoreCLI@2
  displayName: 'dotnet restore'
  inputs:
    command: restore
    projects: '**/*.csproj'
    vstsFeed: 'e157d03d-******-fc06f9e13177'

【讨论】:

  • 感谢您的详细回答,我会检查一下,如果可行,则将其标记为解决方案:)
  • @Maverick1st,欢迎。如果仍有问题,请不要犹豫在这里发表评论~
  • 我不明白的是, vstsFeed 参数的值是什么。我想如果我设置 feedsToUse: 'select' 就需要它。我也尝试了你的 sn-p,没有 vstsFeed: 并且它失败了一条消息,它找不到 api.nuget.org/v3-flatcontainer/… 这当然是完全正确的,因为它不是由 nuget 托管的,而是由我们公司构建的。不知何故,我在理解该构建管道背后的构建过程时仍然存在严重问题。在本地,一切都构建得很好。
  • @Maverick1stm,我想你已经知道这个任务是用来恢复包的。在 Azure devops 中,包可以来自存储自定义包的 Feed,我们还提供了一个复选框,让它仍然从 nuget.org 恢复一些官方包。如果您未指定提要源,默认情况下,它将开始从 nuget.org 查找包。由于您说这些软件包是由您的公司构建的,因此您必须在此处指定提要源。对于 YAML,您可以点击每一步显示的“设置”进行配置。
  • Liang,不幸的是,据我了解这个过程,我无法为我需要的参考创建 nuget 包的提要,因为我没有源代码并且它不是用 azure devops 构建的.但是必须有某种方法可以将已经存在的 nuget 包集成到管道中而不重建它,还是我错了?不幸的是,据我所知,该文档仅涵盖默认情况。在我的特殊情况下,这些都没有帮助我。
猜你喜欢
  • 1970-01-01
  • 2019-12-05
  • 2020-11-24
  • 1970-01-01
  • 1970-01-01
  • 2020-02-13
  • 2021-05-19
  • 2019-07-13
  • 2019-06-22
相关资源
最近更新 更多