是否有.NET Framework的发布任务?(不是.NET内核)
根据MSDocs,发布带有参数的.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应用程序
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)
用于发布路径,我能够创建一个工件