dhq_boiler
@dhq_boiler

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

.NET 5に移行した後Zip内容物がおかしい

解決したいこと

現在開発中のコンピュータグラフィックスツールであるShadowEyeを.NET Framework 4.8から.NET 5.0にマイグレーションしたのですが、マイグレーションしてからAzure DevOpsで自動ビルドした成果物のZipファイルを展開すると、"net5.0-windows10.0.17763.0"というフォルダが生成されて、その中に成果物が入っている状況です。

2021-12-05 (3).png

ShadowEye_(BuildNumber).zipを展開したら、ShadowEye_(BuildNumber)フォルダができて、その中に成果物(ShadowEye.exe等)を収めてほしいのですが、やり方わかる方いらっしゃいますでしょうか?

azure-pipelines.ymlは以下のようになっています。

# .NET Desktop
# Build and run tests for .NET Desktop or Windows classic desktop solutions.
# Add steps that publish symbols, save build artifacts, and more:
# https://docs.microsoft.com/azure/devops/pipelines/apps/windows/dot-net

trigger:
- master

pool:
  vmImage: 'windows-latest'

variables:
  solution: '**/*.sln'
  buildPlatform: 'Any CPU'
  buildConfiguration: 'Release'
  disable.coverage.autogenerate: 'true'

steps:
- task: NuGetToolInstaller@1

- task: NuGetCommand@2
  inputs:
    restoreSolution: '$(solution)'

- task: VSBuild@1
  inputs:
    solution: '$(solution)'
    platform: '$(buildPlatform)'
    configuration: '$(buildConfiguration)'

# Archive files
# Compress files into .7z, .tar.gz, or .zip
- task: ArchiveFiles@2
  condition: always()
  inputs:
    rootFolderOrFile: '$(System.DefaultWorkingDirectory)\ShadowEye\bin\Release' 
    includeRootFolder: false
    archiveType: 'zip' # Options: zip, 7z, tar, wim
    tarCompression: 'gz' # Optional. Options: gz, bz2, xz, none
    archiveFile: '$(Build.ArtifactStagingDirectory)/ShadowEye_$(Build.BuildId).zip' 
    replaceExistingArchive: true 
    #verbose: # Optional
    #quiet: # Optional

# GitHub Release
# Create, edit, or delete a GitHub release
- task: GitHubRelease@0
  condition: always()
  inputs:
    gitHubConnection: dhq-boiler-azure-devops
    repositoryName: '$(Build.Repository.Name)' 
    action: 'create' # Options: create, edit, delete
    target: '$(Build.SourceVersion)' # Required when action == Create || Action == Edit
    tagSource: 'auto' # Required when action == Create# Options: auto, manual
    #tagPattern: # Optional
    #tag: # Required when action == Edit || Action == Delete || TagSource == Manual
    #title: # Optional
    #releaseNotesSource: 'file' # Optional. Options: file, input
    #releaseNotesFile: # Optional
    #releaseNotes: # Optional
    assets: '$(Build.ArtifactStagingDirectory)\ShadowEye_$(Build.BuildId).zip'
    assetUploadMode: 'delete' # Optional. Options: delete, replace
    isDraft: false # Optional
    isPreRelease: false # Optional
    addChangeLog: true # Optional
    compareWith: 'lastFullRelease' # Required when addChangeLog == True. Options: lastFullRelease, lastRelease, lastReleaseByTag
    #releaseTag: # Required when compareWith == LastReleaseByTag

該当するソースコード

自分で試したこと

includeRootFolder: true は試しましたが、Releaseフォルダの中にnet5.0-windows10.0.17763.0フォルダができ、その中に成果物が収まっていますが、これは要件を満たしておりません。

0

4Answer

自己解決しました。

rootFolderOrFileの末尾にnet5.0-windows10.0.17763.0を付ける必要があったみたいです。

# Archive files
# Compress files into .7z, .tar.gz, or .zip
- task: ArchiveFiles@2
  condition: always()
  inputs:
    rootFolderOrFile: '$(System.DefaultWorkingDirectory)\ShadowEye\bin\Release\net5.0-windows10.0.17763.0' 
    includeRootFolder: false
    archiveType: 'zip' # Options: zip, 7z, tar, wim
    tarCompression: 'gz' # Optional. Options: gz, bz2, xz, none
    archiveFile: '$(Build.ArtifactStagingDirectory)/ShadowEye_$(Build.BuildId).zip' 
    replaceExistingArchive: true 
    #verbose: # Optional
    #quiet: # Optional
0Like

windows10.0.17763.0というのはおそらくWindowsのバージョン番号&ビルド番号なので、ビルドする環境(Windows)によって変わると思います。
ビルド結果の出力先が~\bin\Release\net5.0-windows10.0.17763.0となっているのは意図的にそうしているのでしょうか?

0Like

net5.0-windows10.0.17763.0というのはC#プロジェクトファイル(csproj)で定義されているのですが、TargetFrameworkのことですね。

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net5.0-windows10.0.17763.0</TargetFramework>
    <SupportedOSPlatformVersion>10.0.17763.0</SupportedOSPlatformVersion>
    <OutputType>WinExe</OutputType>
    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>
    <RestorePackages>true</RestorePackages>
    <IsWebBootstrapper>false</IsWebBootstrapper>
  (以下略)

このTargetFrameworkの値によって、bin/Debug or bin/Releaseディレクトリに出力されるディレクトリの名前が決まるようです。

2021-12-06 (1).png

ビルド結果の出力先が~\bin\Release\net5.0-windows10.0.17763.0となっているのは意図的にそうしているのでしょうか?

意図的です。

0Like

なるほど、ビルド環境のOSバージョンではなくプロジェクトファイルに設定した固定値なので、ビルドするOSが変わっても変化しないのですね。
失礼いたしました。

0Like

Your answer might help someone💌