是否有.NET Framework的发布任务?(不是.NET内核)

是否有.NET Framework的发布任务?(不是.NET内核),.net,azure-devops,azure-pipelines,azure-pipelines-build-task,azure-pipelines-tasks,.net,Azure Devops,Azure Pipelines,Azure Pipelines Build Task,Azure Pipelines Tasks,根据MSDocs,发布带有参数的.NET核心是一项任务 dotnet publish --output $(Build.ArtifactStagingDirectory) 但我有一个.NET Framework应用程序,而不是.NET Core,这意味着我使用MSBuild任务而不是dotnetcore任务来构建.NET。所以我查看了,实际上没有关于发布.NET Framework应用程序的任何信息 这是否意味着相同的dotnetcore任务适用于/可以用于.NET Framework应用程序

根据MSDocs,发布带有参数的.NET核心是一项任务

dotnet publish --output $(Build.ArtifactStagingDirectory)
但我有一个.NET Framework应用程序,而不是.NET Core,这意味着我使用MSBuild任务而不是dotnetcore任务来构建.NET。所以我查看了,实际上没有关于发布.NET Framework应用程序的任何信息

这是否意味着相同的dotnetcore任务适用于/可以用于.NET Framework应用程序

steps:

- task: DotNetCoreCLI@2
  inputs:
    command: publish
    publishWebProjects: True
    arguments: '--configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory)'
    zipAfterPublish: True

# this code takes all the files in $(Build.ArtifactStagingDirectory) and uploads them as an artifact of your build.
- task: PublishBuildArtifacts@1
  inputs:
    pathtoPublish: '$(Build.ArtifactStagingDirectory)' 
    artifactName: 'myWebsiteName'

以下构建在ubuntu构建代理上工作:

yaml定义:

steps:

- task: NuGetToolInstaller@1    
  displayName: 'Use NuGet '    

- task: NuGetCommand@2    
  displayName: 'NuGet restore'    
  inputs:    
    restoreSolution: '<my_path>.sln'    

- task: MSBuild@1    
  displayName: 'Build solution <my_path>.sln'    
  inputs:    
    solution: '<my_path>.sln'    
    platform: '$(BuildPlatform)'    
    configuration: '$(BuildConfiguration)'    

- task: CopyFiles@2    
  displayName: 'Copy Files to: $(build.artifactstagingdirectory)'    
  inputs:    
    SourceFolder: '$(system.defaultworkingdirectory)'    
    Contents: '**/bin/**'    
    TargetFolder: '$(build.artifactstagingdirectory)'    
  condition: succeededOrFailed()
       
- task: PublishBuildArtifacts@1    
  displayName: 'Publish Artifact: drop'    
  inputs:    
    PathtoPublish: '$(build.artifactstagingdirectory)'    
  condition: succeededOrFailed()
步骤:
-任务:NuGetToolInstaller@1    
displayName:“使用NuGet”
-任务:NuGetCommand@2    
displayName:“NuGet还原”
投入:
恢复解决方案:'.sln'
-任务:MSBuild@1    
displayName:'生成解决方案.sln'
投入:
解决方案:'.sln'
平台:“$(构建平台)”
配置:“$(构建配置)”
-任务:CopyFiles@2    
displayName:'将文件复制到:$(build.artifactstagingdirectory)'
投入:
SourceFolder:“$(system.defaultworkingdirectory)”
目录:'**/bin/**'
TargetFolder:“$(build.artifactstagingdirectory)”
条件:成功或失败()
-任务:PublishBuildArtifacts@1    
displayName:“发布工件:删除”
投入:
PathtoPublish:“$(build.artifactstagingdirectory)”
条件:成功或失败()

我不能使用VSBuild,因为我在没有VS的Ubuntu代理上运行它,这就是为什么我要使用MSBuild。顺便说一句,我在MSBuild上尝试过,它说即使构建成功完成了,也有0个文件要复制…@Cataster,我已经用经典管道进行了测试,它可以工作,请检查我更新答案中的yaml。。。。尝试复制
内容:'**/bin/**'
您能给我看一下任务的经典管道图像吗?无论如何,我更愿意在经典管道中这样做:)好的,所以我将
内容:'**\bin\$(BuildConfiguration)\**'
更改为
**/bin/**'
,这似乎完成了任务!已复制250个文件:)在Windows上安装VS后,与发布相关的任务将位于VS安装文件夹下的Microsoft.WebApplication.targets下。您可以查看它,了解基于.NET Framework的web应用程序可以使用哪些任务。但是,您无法在Linux构建代理计算机上获得它们,因为Linux没有VS/.NET Framework。@LexLi我之所以使用Linux/ubuntu代理,是因为构建时间是3分钟,而在windows代理上是10分钟。我必须编辑我的csproj文件和packages.config以删除.NET编译器,将PackageReference转换为packages.config,并将
添加到packages.config,这最终使MSBuild在Ubuntu代理上成功运行。构建正在运行,我只需要发布“Release”工件就可以在发布管道中使用它。基于.NET Framework的应用程序只在Windows上受完全支持(编译和部署),因此在Linux上这样攻击MSBuild并不是真正“运行”的。@LexLi我也这么认为,但是兰斯帮了我一把,经过一些调整后,我能够得到与在windows上运行时相同的精确结果@LexLi好的,我只是尝试了一些简单的方法,我所做的只是将
projectname/obj/Release
归档为要归档的根文件夹或文件,并为“要创建的归档文件”指定了
$(Build.artifactstagindirectory)/$(Build.BuildId).zip
,最后在发布任务中我只指定了
$(Build.artifactstagindirectory)
用于发布路径,我能够创建一个工件