Azure devops “如何发布.NET”;“释放”;人工制品?

Azure devops “如何发布.NET”;“释放”;人工制品?,azure-devops,azure-pipelines-build-task,azure-devops-pipelines,Azure Devops,Azure Pipelines Build Task,Azure Devops Pipelines,我需要为MSBuild“Release”的发布任务中的根文件/文件夹指定什么 NET版本基本上是二进制文件吗?因为对于AngularOutput构建,我必须指定AngularOutput的路径,但是对于.NET发行版,我不确定这将是什么路径,我认为这是整个项目,也就是说…是二进制文件 预期工件: 更新: 凯文的YAML之后产生的人工制品: steps: - task: NuGetToolInstaller@0 displayName: 'Use NuGet 4.4.1' input

我需要为MSBuild“Release”的发布任务中的根文件/文件夹指定什么

NET版本基本上是二进制文件吗?因为对于AngularOutput构建,我必须指定AngularOutput的路径,但是对于.NET发行版,我不确定这将是什么路径,我认为这是整个项目,也就是说…是二进制文件

预期工件:

更新: 凯文的YAML之后产生的人工制品:

steps:
- task: NuGetToolInstaller@0
  displayName: 'Use NuGet 4.4.1'
  inputs:
    versionSpec: 4.4.1

- task: NuGetCommand@2
  displayName: 'NuGet restore'
  inputs:
    restoreSolution: Sample.sln

- task: MSBuild@1
  displayName: 'Build solution Sample.Web/Sample.Web.csproj'
  inputs:
    solution: Sample.Web/Sample.Web.csproj
    platform: '$(BuildPlatform)'
    configuration: Release
    msbuildArguments: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:DesktopBuildPackageLocation="$(build.artifactstagingdirectory)\WebApp.zip" /p:DeployIisAppPath="Default Web Site"'


- task: PublishBuildArtifacts@1
  displayName: 'Publish Artifact: drop'
  inputs:
    PathtoPublish: '$(Build.ArtifactStagingDirectory)'

内部发布的Web站点


在windows代理上运行更新3后:

steps:
- task: NuGetToolInstaller@0
  displayName: 'Use NuGet 4.4.1'
  inputs:
    versionSpec: 4.4.1

- task: NuGetCommand@2
  displayName: 'NuGet restore'
  inputs:
    restoreSolution: Sample.sln

- task: MSBuild@1
  displayName: 'Build solution Sample.Web/Sample.Web.csproj'
  inputs:
    solution: Sample.Web/Sample.Web.csproj
    platform: '$(BuildPlatform)'
    configuration: Release
    msbuildArguments: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:DesktopBuildPackageLocation="$(build.artifactstagingdirectory)\WebApp.zip" /p:DeployIisAppPath="Default Web Site"'


- task: PublishBuildArtifacts@1
  displayName: 'Publish Artifact: drop'
  inputs:
    PathtoPublish: '$(Build.ArtifactStagingDirectory)'

更新#4:使用VSBuild

结果相同,放置在长路径中:

更新#5:改用
/p:PublishProfile=Project123.pubxml
MSBuild arg,并在windows代理上运行,生成完成得很好,但这次我收到发布任务的以下警告:

##[警告]目录“D:\a\1\a”为空。不会向构建工件“发布”添加任何内容

我尝试将
/p:OutputPath=$(build.artifactstagingdirectory)
添加到MSBuild参数和发布配置文件参数,结果与我之前发布的结果相同:

备注:

steps:
- task: NuGetToolInstaller@0
  displayName: 'Use NuGet 4.4.1'
  inputs:
    versionSpec: 4.4.1

- task: NuGetCommand@2
  displayName: 'NuGet restore'
  inputs:
    restoreSolution: Sample.sln

- task: MSBuild@1
  displayName: 'Build solution Sample.Web/Sample.Web.csproj'
  inputs:
    solution: Sample.Web/Sample.Web.csproj
    platform: '$(BuildPlatform)'
    configuration: Release
    msbuildArguments: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:DesktopBuildPackageLocation="$(build.artifactstagingdirectory)\WebApp.zip" /p:DeployIisAppPath="Default Web Site"'


- task: PublishBuildArtifacts@1
  displayName: 'Publish Artifact: drop'
  inputs:
    PathtoPublish: '$(Build.ArtifactStagingDirectory)'
实际上,我们甚至需要
/p:DeployOnBuild=true
?我理解这是为了部署,但我认为我们不想也不应该在管道中部署,因为我们有一个专门用于将发布的工件部署到应用程序服务的版本

我需要为MSBuild“Release”的发布任务中的根文件/文件夹指定什么

使用Msbuild任务生成项目时,默认情况下,输出文件将保存在Bin文件夹中。例如:
$(build.sourcesdirectory)/Projectname/bin

根据项目的结构,具体路径可能会有所不同

我建议您可以在msbuild任务中添加msbuild参数(例如,
/p:OutputPath=$(build.artifactstagingdirectory)

例如:

在这种情况下,可以将特定路径设置为输出路径。这将使您更容易归档和发布工件

更新:

steps:
- task: NuGetToolInstaller@0
  displayName: 'Use NuGet 4.4.1'
  inputs:
    versionSpec: 4.4.1

- task: NuGetCommand@2
  displayName: 'NuGet restore'
  inputs:
    restoreSolution: Sample.sln

- task: MSBuild@1
  displayName: 'Build solution Sample.Web/Sample.Web.csproj'
  inputs:
    solution: Sample.Web/Sample.Web.csproj
    platform: '$(BuildPlatform)'
    configuration: Release
    msbuildArguments: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:DesktopBuildPackageLocation="$(build.artifactstagingdirectory)\WebApp.zip" /p:DeployIisAppPath="Default Web Site"'


- task: PublishBuildArtifacts@1
  displayName: 'Publish Artifact: drop'
  inputs:
    PathtoPublish: '$(Build.ArtifactStagingDirectory)'
Ubuntu代理:

如果未设置msbuild参数,则输出文件将显示在bin文件夹中:

添加msbuild参数时,它会将文件上载到目标路径:

它们的内容相同

更新2:

steps:
- task: NuGetToolInstaller@0
  displayName: 'Use NuGet 4.4.1'
  inputs:
    versionSpec: 4.4.1

- task: NuGetCommand@2
  displayName: 'NuGet restore'
  inputs:
    restoreSolution: Sample.sln

- task: MSBuild@1
  displayName: 'Build solution Sample.Web/Sample.Web.csproj'
  inputs:
    solution: Sample.Web/Sample.Web.csproj
    platform: '$(BuildPlatform)'
    configuration: Release
    msbuildArguments: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:DesktopBuildPackageLocation="$(build.artifactstagingdirectory)\WebApp.zip" /p:DeployIisAppPath="Default Web Site"'


- task: PublishBuildArtifacts@1
  displayName: 'Publish Artifact: drop'
  inputs:
    PathtoPublish: '$(Build.ArtifactStagingDirectory)'
您可以尝试以下示例为Azure应用程序服务创建包

经典:

亚马尔:

结果:

steps:
- task: NuGetToolInstaller@0
  displayName: 'Use NuGet 4.4.1'
  inputs:
    versionSpec: 4.4.1

- task: NuGetCommand@2
  displayName: 'NuGet restore'
  inputs:
    restoreSolution: Sample.sln

- task: MSBuild@1
  displayName: 'Build solution Sample.Web/Sample.Web.csproj'
  inputs:
    solution: Sample.Web/Sample.Web.csproj
    platform: '$(BuildPlatform)'
    configuration: Release
    msbuildArguments: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:DesktopBuildPackageLocation="$(build.artifactstagingdirectory)\WebApp.zip" /p:DeployIisAppPath="Default Web Site"'


- task: PublishBuildArtifacts@1
  displayName: 'Publish Artifact: drop'
  inputs:
    PathtoPublish: '$(Build.ArtifactStagingDirectory)'

更新3:

steps:
- task: NuGetToolInstaller@0
  displayName: 'Use NuGet 4.4.1'
  inputs:
    versionSpec: 4.4.1

- task: NuGetCommand@2
  displayName: 'NuGet restore'
  inputs:
    restoreSolution: Sample.sln

- task: MSBuild@1
  displayName: 'Build solution Sample.Web/Sample.Web.csproj'
  inputs:
    solution: Sample.Web/Sample.Web.csproj
    platform: '$(BuildPlatform)'
    configuration: Release
    msbuildArguments: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:DesktopBuildPackageLocation="$(build.artifactstagingdirectory)\WebApp.zip" /p:DeployIisAppPath="Default Web Site"'


- task: PublishBuildArtifacts@1
  displayName: 'Publish Artifact: drop'
  inputs:
    PathtoPublish: '$(Build.ArtifactStagingDirectory)'

我明白了,但是在Ubuntu代理上运行MSBuild参数是否有效?我今天用一个buncha选项运行它,包括MSDeploy和Setting包,但我觉得它没有任何效果……嗨@Cataster。对于参数:
/p:OutputPath=$(build.artifactstagingdirectory)
,根据我的测试,构建参数可以将输出文件传递到正确的路径。它可以在Ubuntu代理上正常工作。我在其中一张图片中意识到这是一个netcore应用程序。对于.NET Framework应用程序,这是否也适用?(不是.NET Core)@Cataster获得它将测试并检查它,谢谢。要在存档任务中创建
存档文件
,您的值是多少?它是否与发布任务中的PathTopPublish相同。根据我的测试,输出内容与msbuild参数相关。请参考我的更新3,并检查它是否可以使一些changes@KevinLu-MSFT我用update3 yaml更新了管道,因此我禁用了存档,按照建议添加了MSBuild参数,并修改了pathToPublish
$(build.artifactStaginDirectory)/$(build.BuildId).zip
->
$(build.artifactStaginDirectory)
。然而,这一次没有产生任何人工制品。收到以下警告:
#[warning]目录“/home/vsts/work/1/a”为空。构建工件“Release”时不会添加任何内容。
@KevinLu MSFT我在windows agent上测试了它,看起来它确实产生了一些与linux agent不同的东西。但是,路径很长。内容不完全在根上。这可能就是为什么在linux代理中,根据我上面的评论,它找不到我认为的任何东西。因此,即使在windows上,它也与预期的工件不完全匹配。请尝试使用VS Build任务在Microsoft Hosted agent上运行相同的参数?另一方面,根据我们前面的讨论,您可以将
/p:DeployOnBuild=true/p:PublishProfile=xxxx
添加到构建参数以使用发布配置文件。请检查一下它是否能做些什么changes@KevinLu-MSFT请查看我的更新4和5