Azure Ошибка построения Devops при использовании GeneratePathProperty true для PackageReference - PullRequest
0 голосов
/ 10 марта 2020

Мы создали проект в Visual Studio, где мы используем ссылки на пакеты NuGet. Для одного из пакетов NuGet мы устанавливаем для свойства GeneratePathProperty значение true, чтобы мы могли скопировать файлы из расположения пакета NuGet в папку «Выходной лоток» нашего проекта

. Он настроил файл .csproj, как показано ниже:

<PackageReference Include="ilmerge" GeneratePathProperty="true">
  <Version>3.0.29</Version>
</PackageReference>
<None Include="$(Pkgilmerge)\tools\net452\ILMerge.exe">
  <Link>ILMerge.exe</Link>
  <CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="$(Pkgilmerge)\tools\net452\System.Compiler.dll">
  <Link>System.Compiler.dll</Link>
  <CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>

Это прекрасно работает локально (с использованием Visual Studio 2019) - компиляции проекта и файлы копируются в папку bin, однако в нашем конвейере сборки используется агент, размещенный windows -2019 (который также должен иметь VS 2019 в соответствии с документацией https://github.com/actions/virtual-environments/blob/master/images/win/Windows2019-Readme.md), это не выполняется во время задачи сборки:

[ошибка] C: \ Program Files (x86) \ Microsoft Visual Studio \ 2019 \ Enterprise \ MSBuild \ Current \ Bin \ Microsoft.Common.CurrentVersion.targets (4601,5): Ошибка MSB3030: не удалось скопировать файл 'd: \ tools \ net452 \ ILMerge.exe', так как он не был найден.

[ошибка] C: \ Program Files (x86) \ Microsoft Visual Studio \ 2019 \ Enterprise \ MSBuild \ Current \ Bin \ Microsoft.Common.CurrentVersion.targets (4601,5): ошибка MSB3030: не удалось скопировать файл ' d: \ tools \ net452 \ System.Compiler.dll ', поскольку он не был найден.

Определение сборки имеет следующие задачи

steps:
- task: NuGetToolInstaller@0
- task: NuGetCommand@2
  displayName: 'Restore Nugets'
  inputs:
    restoreSolution: '$(solutions)'
    vstsFeed: 'Project-Packages'

- task: VSBuild@1
  inputs:
    solution: '$(solutions)'
    platform: 'Any CPU'
    configuration: 'Release'
    logProjectEvents: false

- task: PublishBuildArtifacts@1
  inputs:
    pathtoPublish: '$(Build.StagingDirectory)'
    artifactName: $(pluginName)
  condition: always()

Любые идеи о том, что может быть проблемой или что мы нужно изменить, чтобы в Azure DevOps работала сборка?

Позже Редактировать: я добавил некоторые записи

  <Target Name="¨ReMerge" AfterTargets="ILRepacker" >
    <Message Text="Remerging Assemblies using ILMerge from $(Pkgilmerge) and setting AssemblyVersion = 2.0.0.0" Importance="High" />
    <Exec Command="dir $(Pkgilmerge)"></Exec>
    <Exec Command="$(Pkgilmerge)\tools\net452\ILMerge.exe /ver:2.0.0.0 /out:$(TargetDir)$(TargetName)Merged.dll /keyfile:$(ProjectDir)Zurich.Zkp.Key.snk $(TargetDir)$(TargetName)MergedTemp.dll"></Exec>
  </Target>

И кажется, что в AzureDevops $ (Pkgilmerge) пусто

Спасибо

1 Ответ

2 голосов
/ 11 марта 2020

Вышеупомянутая ошибка была вызвана старой версией (4.x) Nuget, используемой для восстановления вашего решения.

Вам необходимо указать версию Nuget, которая является самой новой для вашей задачи NuGetToolInstaller. Если она не указана, версия будет выбрана автоматически.

В приведенном ниже примере указывается задача NuGetToolInstaller для использования версии 5.4.x. Nuget.

- task: NuGetToolInstaller@0
  inputs:
    versionSpec: 5.4.x
...