dotnet / dotnet/deployment-tools

DotNetRuntimeValidation nonshipping archives lose build suffix in stable builds

Open
#569 0 comments 0 reactions 0 assignees View on GitHub
bug untriaged
Dominant language
C#
Stars
213
Forks
73
Avg merge
1d 21h
Merged PRs (30d)
4

Description

### Description

`DotNetRuntimeValidation` is a nonshipping asset, but its archive filename directly concatenates `VersionPrefix` and `VersionSuffix`:

https://github.com/dotnet/deployment-tools/blob/main/src/DotNetRuntimeValidation/Directory.Build.targets

```xml
DotNetRuntimeValidation-$(VersionPrefix)-$(VersionSuffix)-win-$(TargetArchitecture).zip
```

When deployment-tools is built with stable/stabilized product versioning, `VersionSuffix` is empty. This produces names such as:

- `assets/x86/DotNetRuntimeValidation-10.0.0--win-x86.zip`
- `assets/x64/DotNetRuntimeValidation-10.0.0--win-x64.zip`
- `assets/arm64/DotNetRuntimeValidation-10.0.0--win-arm64.zip`

These entries appear in the manifests from [VMR build 3049220](https://dev.azure.com/dnceng/internal/_build/results?buildId=3049220), with `RepoOrigin=deployment-tools`, `NonShipping=true`, and the corresponding `Windows_*_Artifacts` origin.

This bypasses the repository's nonshipping-aware version flow: [`Directory.Build.targets`](https://github.com/dotnet/deployment-tools/blob/main/Directory.Build.targets) sets `IncludePreReleaseLabelInPackageVersion=true` when `IsShipping != true`. A deployment-tools package in the same manifest is correctly unique (`Microsoft.Deployment.DotNet.Releases.2.0.0-rtm.1.26416.102.nupkg`), while the validation archive has no build suffix.

### Impact

The empty suffix emits a double separator and, more importantly, gives every stable build the same archive name/version. This creates collisions between builds; examples include [build 3030876](https://dev.azure.com/dnceng/internal/_build/results?buildId=3030876) and [build 3049329](https://dev.azure.com/dnceng/internal/_build/results?buildId=3049329).

### Regression timing

- Before stabilization, VMR build `20260417.14` produced `DotNetRuntimeValidation-10.0.0-preview.1.26217.114-win-x64.zip`.
- [dotnet/dotnet#5854](https://github.com/dotnet/dotnet/pull/5854), merged 2026-04-22, reset deployment-tools to stable build 306729 / [deployment-tools commit 95a979e](https://github.com/dotnet/deployment-tools/commit/95a979e12bf2a7707a29954612508b2a0ef3d42c), exposing the filename/property issue under `rtm` / `StabilizePackageVersion=true` versioning.
- The earliest archived affected manifest found is VMR build `20260428.18`, with `DotNetRuntimeValidation-10.0.0--win-x64.zip`.

### Expected behavior

Nonshipping `DotNetRuntimeValidation` archive names should retain a unique prerelease/build suffix even when the repository/product build is stable, and should never emit an empty `--` separator.

The filename likely needs to consume the nonshipping-aware evaluated version rather than directly concatenating `VersionPrefix`/`VersionSuffix`; the exact property and target evaluation ordering should be validated in the fix.

Contributor guide

Open the contributing guide

Research direction

Start with src/DotNetRuntimeValidation/Directory.Build.targets and compare its archive-name inputs with the nonshipping version flow in Directory.Build.targets. Validate the evaluated properties and target ordering for stable and prerelease builds. Done means stable nonshipping archives have a unique build suffix and never contain an empty `--` separator.

Written by the indexing model from the issue text.

Assessment

Tech stack
csharp
Domain
build-system
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
70/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.