build: the exe is LlamaCasty.exe, and the publish script proves the artifact
Renames AssemblyName to LlamaCasty before the first Steam depot — Steamworks is explicit that renaming a live exe is painful, so this had to land first, not later. Four assembly-qualified pack URIs carried the old name, not three: MainWindow (window icon), OverlayHost (logo), RenameRecordingDialog and KeepBroadcastDialog. Pack URIs resolve by assembly name at runtime, so a stale one compiles, passes every test and then silently renders nothing the first time that view opens. AssemblyIdentityTests guards both halves — the assembly name, and no source XAML still naming the legacy assembly. Packaging/Package.appxmanifest and package-msix.sh carry the exe name too. scripts/publish.sh replaces the by-hand publish: single-file win-x64, ReadyToRun, ffmpeg beside the exe, and it refuses to finish if ffmpeg, LICENSE, PRIVACY.md or THIRD-PARTY-NOTICES.txt are missing, or if a test assembly leaked in. That last guard exists because the first publish was wrong in a way no test could see: PublishSingleFile + IncludeNativeLibrariesForSelfExtract bundled the libav*.dll family into the exe — a 9-file output with no ffmpeg folder and a 182 MB binary, so the locator would have found nothing at runtime. ExcludeFromSingleFile="true" on the content keeps the folder a folder. Diffing against a control publish without the single-file flags found it; guessing at item globs wasted two attempts first (recorded in MyMistakes.md). Measured: 127 MB exe + 129 MB ffmpeg = 257 MB depot. Tests: AssemblyIdentity, StorePackaging, BuildStamp, BundledFonts all pass; app builds with 0 warnings.
This commit is contained in:
+13
-9
@@ -28,18 +28,22 @@ the internal repo/assembly/namespace name only. Exact current split:
|
||||
| surface | name | note |
|
||||
|---|---|---|
|
||||
| product / site / marketing | **LlamaCasty** | llamacasty.com, llamachile.tube |
|
||||
| repo dir, csproj, `RootNamespace` | `ytLive` | 230 files: `namespace ytLive.*` |
|
||||
| `AssemblyName` → shipped exe | `ytLive` | `ytLive.exe` |
|
||||
| repo dir, csproj file, `RootNamespace` | `ytLive` | 230+ files: `namespace ytLive.*` |
|
||||
| `AssemblyName` → shipped exe | **`LlamaCasty`** | `LlamaCasty.exe` — renamed 2026-11-01 |
|
||||
| app data dir | `%APPDATA%\ytLlive` | **capital L**, drifts from `ytLive` |
|
||||
| `Distribution.md` tells customers | `LlamaCasty.exe` | ⚠ **mismatch vs the real `ytLive.exe`** |
|
||||
|
||||
**Consequences, so nobody re-hunts them:**
|
||||
- Renaming `<AssemblyName>` to `LlamaCasty` is the cheap win (the customer-visible exe
|
||||
name matches what `Distribution.md` already promises; namespaces can stay `ytLive.*`).
|
||||
It is **4 lines**, but it hard-breaks three pack URIs that spell the assembly name:
|
||||
`MainWindow.xaml:14` (the **window icon** — taskbar/Alt-Tab), `OverlayHost.xaml:96`,
|
||||
`RenameRecordingDialog.xaml:5`. Miss those and you ship a broken icon. Queued in TASKS.md
|
||||
under the shipping task, not done.
|
||||
- The assembly rename landed 2026-11-01 (before the first Steam depot, because Steamworks warns
|
||||
that renaming a live exe is painful). Namespaces stay `ytLive.*` — they are not user-visible
|
||||
and renaming them would churn every file for nothing.
|
||||
- An assembly-qualified pack URI spells the assembly name, so the rename **hard-breaks silently**
|
||||
at runtime, not at compile time. Four carried it, not three:
|
||||
`MainWindow.xaml:14` (window icon — taskbar/Alt-Tab), `OverlayHost.xaml:96`,
|
||||
`RenameRecordingDialog.xaml:5`, and `KeepBroadcastDialog.xaml:5`.
|
||||
`ytLive.Tests/AssemblyIdentityTests.cs` now guards both halves: the assembly name is
|
||||
`LlamaCasty` and no source XAML still names the legacy assembly.
|
||||
- `Packaging/Package.appxmanifest` (`Executable`) and `scripts/package-msix.sh` carry the exe
|
||||
name too; the MSIX is unused but must not lie about the artifact.
|
||||
- Renaming the `%APPDATA%\ytLlive` folder is **breaking** — it would orphan every existing
|
||||
user's layout DB, `Assets` and settings. Never do it casually; needs a migration.
|
||||
- No code compares its own assembly name (no `GetExecutingAssembly().GetName().Name` checks),
|
||||
|
||||
Reference in New Issue
Block a user