Можно ли опубликовать проект Xamarin в частном фиде пакетов nuget в VSTS (DevOps) - PullRequest
0 голосов
/ 25 сентября 2019

Был создан проект Xamarain и создан конвейер Devops (VSTS) для построения и публикации проекта в частном фиде Nuget.Все прекрасно работает, но шаг, который Pack пакет nuget не удастся.

1) Моя первая попытка была использовать "Macos-latest", чтобы сделать msbuild @ 1 для решения,Установщик Nuget использует файл nuspec для упаковки.На этапе упаковки появляется сообщение об ошибке

2) Затем я попытался выполнить VSBuild @ 1, а затем DotNetCoreClI @ 2 безуспешно.

3) Я также попытался разделить 3проекты (iOS, Android, UWP) на 3 отдельных задания, но они также не смогли выполнить упаковку.

4) Я пробовал разные методы упаковки, файлы nuspec, файл csproj, но безуспешно.

Мой YAML-файл выглядит следующим образом:

'
- task: NuGetToolInstaller@1 
   displayName: 'Install nuget.exe 4.4.1'
   inputs:      
     versionSpec: 4.4.1'

- task: NuGetCommand@2
  displayName: "restore the ble solution"
  inputs:
    command: 'restore'
    restoreSolution: '**/*.sln'
    feedsToUse: 'select'
    vstsFeed: '$(packageFeedName)'

- task: MSBuild@1
  displayName: 'Build BLE solution'
  inputs:
    solution: "**/*.sln"
    configuration: '$(buildConfiguration)'      
    msbuildArguments: '/p:OutputPath=$(outputDirectory) /p:JavaSdkDirectory="$(JAVA_HOME)/"'

- task: NuGetCommand@2
  displayName: "pack nuget"
  inputs:
    command: pack
    packagesToPack: './myproject.nuspec'
    packDestination: '$(Build.ArtifactStagingDirectory)'
    versioningScheme: byEnvVar
    versionEnvVar: 'nugetVersion'
    includeSymbols: true

'

Это всегда сводится к одной и той же проблеме с использованием файла nuspec.

Attempting to build package from 'BLE.nuspec'. 

[error]The nuget command failed with exit code(1) and error(Could not find a part of the path /Users/vsts/agent/2.155.1/work/1/s/Plugin.BLE/bin/Release/netstandard2.0.

System.IO.DirectoryNotFoundException: Could not find a part of the path /Users/vsts/agent/2.155.1/work/1/s/Plugin.BLE/bin/Release/netstandard2.0.

КогдаЯ использую ** / *. Csproj для пакета, я получаю:

Build FAILED.
d:\a\1\s\Plugin.BLE.Android\Plugin.BLE.Android.csproj" (pack target) (1:2) ->d:\a\1\s\Plugin.BLE.Android\Plugin.BLE.Android.csproj(94,3): error MSB4019: The imported project "C:\Program Files\dotnet\sdk\2.2.105\Xamarin\Android\Xamarin.Android.CSharp.targets" was not found. 
Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.

Ответы [ 2 ]

1 голос
/ 26 сентября 2019

Можно ли опубликовать проект Xamarin в частном фиде пакетов nuget в VSTS (DevOps)

Ответ - да.Это зависит от того, сколько пакетов вы хотите сгенерировать.

Если вы хотите создать один пакет nuget для 3 проектов (iOS, Android, UWP), вам следует использовать файл .nuspec.

Проблема в том, что вы не настроилиправильный путь в файле .nuspec.Файл .nuspec должен быть установлен в папке на один уровень ниже , где находится файл .sln.Путь к dll - это относительный путь, в котором хранится файл .nupsec.

Итак, путь должен выглядеть следующим образом:

<files>
    <!-- Cross-platform reference assemblies -->
    <file src="XamarinDemo\bin\Release\XamarinDemo.dll" target="lib\netstandard2.0\XamarinDemo.dll" />
    <file src="XamarinDemo\bin\Release\XamarinDemo.xml" target="lib\netstandard2.0\XamarinDemo.xml" />

    <!-- iOS reference assemblies -->
    <file src="XamarinDemo.iOS\bin\Release\XamarinDemo.dll" target="lib\Xamarin.iOS10\XamarinDemo.dll" />
    <file src="XamarinDemo.iOS\bin\Release\XamarinDemo.xml" target="lib\Xamarin.iOS10\XamarinDemo.xml" />

    <!-- Android reference assemblies -->
    <file src="XamarinDemo.Android\bin\Release\XamarinDemo.dll" target="lib\MonoAndroid10\XamarinDemo.dll" />
    <file src="XamarinDemo.Android\bin\Release\XamarinDemo.xml" target="lib\MonoAndroid10\XamarinDemo.xml" />

    <!-- UWP reference assemblies -->
    <file src="XamarinDemo.UWP\bin\Release\XamarinDemo.dll" target="lib\UAP10\XamarinDemo.dll" />
    <file src="XamarinDemo.UWP\bin\Release\XamarinDemo.xml" target="lib\UAP10\XamarinDemo.xml" />
</files>

Проверить документ Создать пакеты дляXamarin с Visual Studio 2015 для некоторых деталей.

Если вы хотите создать три пакета nuget для каждой платформы, вы можете использовать a **/*.csproj для пакета.

Причинаваша проблема заключается в том, что вам нужно установить основной пакет SDK .NET перед созданием проекта / решения:

- task: UseDotNet@2
  displayName: 'Use .Net Core sdk 2.2.105'
  inputs:
    version: 2.2.105

Надеюсь, это поможет.

0 голосов
/ 27 сентября 2019

Итак, моей проблемы не было в моем файле nuspec;реальная проблема сводится к использованию vmImage: «macos-latest», который необходим, если вы хотите построить проект iOS (iOS не будет собираться под агентами 2019 или 2017, и вы должны использовать MSBuild (не VSBuild)

В последнем образе macos есть несколько проблем (которые я буду называть агентом iOS)

  1. Пакет nuspec для System.Threading.Task.Extensions (STTE) не включается, когда вы вносите в другой пакет nuget, который зависит от него. Если пакет находится в «Стандартном проекте .net 2.0», то пакет STTE должен быть включен в стандартный проект и проект ios;это происходит только в агенте ios.

  2. Переменная, которую я использовал для пути решения $ (решение), не расширилась до myproj.sln, в журнале путь показывался как / $ ($решение), и проект не был создан, нет предупреждений или ошибок, что нулевые проекты были построены; проблема не возникла ни в одном другом типе агента, который я тестировал.

  3. Xamarin sdk агента iosяК сожалению, устарел и должен быть установлен.

требуется yaml:

variables:
  mono: 5_18_1
  xamarinSDK: 12_8_0_2


- task: Bash@3
    displayName: "Set xamarinSDK to version $(mono)"
    inputs:
      targetType: 'inline'
      script: /bin/bash -c "sudo $AGENT_HOMEDIRECTORY/scripts/select-xamarin-sdk.sh $(mono)"

Методика, использованная для выяснения этого, состояла в том, чтобы разделить проект Xamarin на 4 отдельных проекта и опубликовать их как отдельные проекты:

  • .Net Standard 2.0
  • UWP
  • Android
  • iOS

Каждый проект, кроме iOS, работал с использованиемVSBuild и агент 2019 года;тогда это был процесс исключения на агенте ios.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...