Azure devops 正在尝试将生成发布到Nuget.org

Azure devops 正在尝试将生成发布到Nuget.org,azure-devops,Azure Devops,我是Azure DevOps的新手;然而,我所做的似乎应该很简单:我只想编译一个项目并发布到NuGet.org。我在做这件事时遇到了很多障碍,我觉得我可能是误用了这个工具 我有一个构建,看起来像这样: trigger: - master pool: vmImage: 'windows-2019' variables: buildConfiguration: 'Release' steps: - script: dotnet build --configuration $(build

我是Azure DevOps的新手;然而,我所做的似乎应该很简单:我只想编译一个项目并发布到NuGet.org。我在做这件事时遇到了很多障碍,我觉得我可能是误用了这个工具

我有一个构建,看起来像这样:

trigger:
- master

pool:
  vmImage: 'windows-2019'

variables:
  buildConfiguration: 'Release'

steps:
- script: dotnet build --configuration $(buildConfiguration) /property:Version=$(Build.BuildNumber)
  displayName: 'dotnet build $(buildConfiguration)'
- task: PublishBuildArtifacts@1
  inputs:
    pathtoPublish: '$(Build.ArtifactStagingDirectory)' 
    artifactName: 'drop' 
这成功地构建了。但是,我确实收到了以下警告:

##[warning]Directory 'd:\a\1\a' is empty. Nothing will be added to build artifact 'drop'.
当我尝试部署时,会出现错误-最新的错误是:

没有与搜索模式匹配的文件

在dotnet pack中,以下是pack的发布步骤:

steps:
- task: DotNetCoreCLI@2
  displayName: 'dotnet pack'
  inputs:
    command: pack
    packagesToPack: '$(System.DefaultWorkingDirectory)/name.project'
这是目前失败的地方,但下一步打算发布到NuGet(为了完整性——万一有更简单的方法来完成这一切):

发行版有一个工件,我将其设置为构建的输出(我认为);但是,我从以下方面得到了错误:

name.project没有可用的版本,或者最新版本已发布 没有要发布的工件。请检查源管道

我的理解是,构建应该包含生成二进制文件等所涉及的步骤,而发布应该包含部署构建文件所涉及的任何步骤。因此,我应该能够多次“构建”和“发布”到多个位置。我觉得这种理解与我所看到的错误不一致

我的理解正确吗


我在这里做错了什么?更重要的是,诊断问题的方法是什么?

您需要为
dotnet build提供
--output
参数。添加以下内容

--output $(Build.ArtifactStagingDirectory)
所以命令应该是这样的

dotnet build --configuration $(buildConfiguration) /property:Version=$(Build.BuildNumber) --output $(Build.ArtifactStagingDirectory)
这将把输出放入工件暂存目录(d:\a\1\a) 其中将包括
*.nupkg
文件

我假设您正在使用新的CSProj格式,并且您正在为NuGet包提供属性,并且已经设置了
true
属性。如果是这样,
*.nupkg
文件应该位于您在dotnet build命令中定义的输出目录中。那么您就不需要使用
dotnetpack
。在发布定义中,您只需要使用NuGet任务并使用push命令将包推送到NuGet提要


以此为参考。它没有完整的细节,因为它只关注整个过程的几个方面。但是正确的构建方面应该会有帮助。

您需要为
dotnet构建提供
--output
参数。添加以下内容

--output $(Build.ArtifactStagingDirectory)
所以命令应该是这样的

dotnet build --configuration $(buildConfiguration) /property:Version=$(Build.BuildNumber) --output $(Build.ArtifactStagingDirectory)
这将把输出放入工件暂存目录(d:\a\1\a) 其中将包括
*.nupkg
文件

我假设您正在使用新的CSProj格式,并且您正在为NuGet包提供属性,并且已经设置了
true
属性。如果是这样,
*.nupkg
文件应该位于您在dotnet build命令中定义的输出目录中。那么您就不需要使用
dotnetpack
。在发布定义中,您只需要使用NuGet任务并使用push命令将包推送到NuGet提要

以此为参考。它没有完整的细节,因为它只关注整个过程的几个方面。但是它应该有助于获得正确的构建方面

正在尝试将生成发布到Nuget.org

对于第一个错误,这是因为您在使用任务之前误解了任务

检查发布生成工件任务,您可以查看此任务用于将生成工件发布到Azure管道、TFS或文件共享

但是在构建项目/解决方案之后,输出存储在构建代理上,而不是工件上。因此,我们需要在
PublishBuildArtifacts
之前添加
copy任务
,将文件从输出复制到工件:

steps:
- task: CopyFiles@2
  displayName: 'Copy Files to: $(build.artifactstagingdirectory)'
  inputs:
    SourceFolder: '$(system.defaultworkingdirectory)'
    TargetFolder: '$(build.artifactstagingdirectory)'
  enabled: false
对于第二个错误,您应该在repos中指定项目,而不是在
系统中指定项目。默认工作目录
,用于构建项目,请在repos中将路径更改为csproj:

steps:
- task: DotNetCoreCLI@2
  displayName: 'dotnet pack'
  inputs:
    command: pack
    packagesToPack: NetCoreDemo/NetCoreDemo/NetCoreDemo.csproj
希望这有帮助

正在尝试将生成发布到Nuget.org

对于第一个错误,这是因为您在使用任务之前误解了任务

检查发布生成工件任务,您可以查看此任务用于将生成工件发布到Azure管道、TFS或文件共享

但是在构建项目/解决方案之后,输出存储在构建代理上,而不是工件上。因此,我们需要在
PublishBuildArtifacts
之前添加
copy任务
,将文件从输出复制到工件:

steps:
- task: CopyFiles@2
  displayName: 'Copy Files to: $(build.artifactstagingdirectory)'
  inputs:
    SourceFolder: '$(system.defaultworkingdirectory)'
    TargetFolder: '$(build.artifactstagingdirectory)'
  enabled: false
对于第二个错误,您应该在repos中指定项目,而不是在
系统中指定项目。默认工作目录
,用于构建项目,请在repos中将路径更改为csproj:

steps:
- task: DotNetCoreCLI@2
  displayName: 'dotnet pack'
  inputs:
    command: pack
    packagesToPack: NetCoreDemo/NetCoreDemo/NetCoreDemo.csproj

希望这能有所帮助。

只是想看看提供的信息是否有用。如果您需要进一步的帮助,请告诉我们。我在这里有点困惑。在我发布nuget包的所有历史中,我都是在构建过程中完成的,而不是在发布过程中。发布用于部署bits以在环境中实际使用。您希望创建一个包,作为构建的一部分供以后使用。按照nuget pack和nuget publish的标准,这不是一个发布版。只是检查一下所提供的信息是否有用。如果您需要进一步的帮助,请告诉我们。我在这里有点困惑。在我发布nuget包的所有历史中,我都是在构建过程中完成的,而不是在发布过程中。发布用于部署bits以在环境中实际使用。您希望创建一个包,作为构建的一部分供以后使用。按照nuget pack和nuget pub的标准,这不是一个版本