Скопируйте файл из пакета NuGet в OutDir в проекте, не работающем на Azure DevOps

#azure-devops #nuget-package #build-pipeline

#azure-devops #nuget-package #сборка-конвейер

Вопрос:

У меня проблема только с Azure DevOps!

Он отлично работает в Visual Studio 2019, когда я щелкаю правой кнопкой мыши и создаю. Он также отлично работает, если я использую сборку dotnet из CMD локально.

Пакет Nuget выглядит следующим образом:

csproj

  <ItemGroup>
    <None Include="Utilities.Api.xml" Pack="true" PackagePath="File">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Include="buildUtilities.Api.props" Pack="true" PackagePath="build"></None>

  </ItemGroup>

  <ItemGroup>
    <None Update="Utilities.Api.xml">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>


    </None>
  </ItemGroup>
  

файл реквизита

 <Project>

    <Target Name="CopyFilesToProject" BeforeTargets="Build">
        <ItemGroup>
            <SourceScripts Include="$(MSBuildThisFileDirectory)..File*.xml*"/> 
        </ItemGroup>
        <Copy
           SourceFiles="@(SourceScripts)"
           DestinationFolder="$(OutDir)"
        />
    </Target>


</Project>
  

Когда я запускаю конвейер в Azure, я использую эту версию MSBuild (версия движка сборки Microsoft (R) (16.7.0 7fb82e5b2 для .NET) через «сборку dotnet».

этап сборки конвейера:

   - task: DotNetCoreCLI@2
    displayName: Build
    timeoutInMinutes: 0
    inputs:
      command: build
      projects: src/**/*.csproj
      arguments: '--configuration $(BuildConfiguration) /p:reportanalyzer=true /p:TreatWarningsAsErros=$(warnAsErrors)'
  

У меня есть шаг публикации после моей сборки.

  - task: DotNetCoreCLI@2
    condition: and(succeeded(), not(variables.RunSonar))
    displayName: Publish and zip artifacts
    inputs:
      command: publish
      publishWebProjects: false
      arguments: '--configuration $(buildConfiguration) --no-build --output $(Build.ArtifactStagingDirectory)'
      packDirectory: '$(Build.ArtifactStagingDirectory)'
      zipAfterPublish: true
      projects: |
        src/**/*.Api.csproj
        !src/Test/**/*.csproj
  

Это начинает сильно расстраивать 🙂

Комментарии:

1. Вы пробовали dotnet msbuild command learn.microsoft.com/en-us/dotnet/core/tools/dotnet-msbuild ? Вам нужно использовать custom command в DotNetCoreCLI@2 task.

2. Можете ли вы добавить журналы своего Build шага?

3. Вы хотите видеть только журналы из Azure devops?

4. да, только для Azure DevOps

Ответ №1:

Хорошо, я нашел решение. Что имеет смысл.

Причиной такого поведения было то, что у меня были только цели для BeforeBuild. Мне также пришлось добавить цель для публикации.

Мой файл props теперь выглядит следующим образом, и он работает как локально, так и на Azure DevOps.

 <Project>

  <Target Name="CopyFilesToProject" BeforeTargets="BeforeBuild">
    <ItemGroup>
      <SourceScripts Include="$(MSBuildThisFileDirectory)..File*.xml*"/>
    </ItemGroup>

    <Copy
         SourceFiles="@(SourceScripts)"
         DestinationFolder="$(OutDir)" />
  </Target>


  <Target Name="PublishCopyFiles" AfterTargets="Publish">
    <ItemGroup>
      <SourceScripts Include="$(MSBuildThisFileDirectory)..File*.xml*"/>
    </ItemGroup>
    <Copy
       SourceFiles="@(SourceScripts)"
       DestinationFolder="$(PublishDir)" />
  </Target>

</Project>