Stage per-API subfolders from StrideGraphicsApis (what the build produces)
instead of a hardcoded per-TFM set: single-API CI builds staged nothing
while still stripping the flat DLL, so the AssetCompiler crashed with
FileNotFoundException on Stride.Graphics.
Lets tooling hosts pick Direct3D11/Direct3D12/Vulkan at launch instead of
being fixed to one API at build time.
- GraphicsApiSelector: shared --graphics-api / STRIDE_GRAPHICS_API / host
preference resolution; bad values fail loudly (stderr+exit for console,
recorded StartupError surfaced by GameStudio's WPF dialog).
- Deployed path: NuGet resolver picks the API subfolder via ListAssemblies.
- Local path: StrideMultiGraphicsApiHost lays per-API bin subfolders and
GraphicsApiHostResolver loads the selected one via AssemblyLoadContext.
- GameStudio setting (Environment/GraphicsApi, restart) read pre-resolver.
- Show active API in title bar / AssetCompiler banner via GraphicsDevice.Platform.
- launchSettings profiles for bin and packaged runs.
AssetCompiler/GameStudio no-RID builds copied every RID's runtimes/<rid>/
assets (~250 MB of unused android/ios/tvos). New StrideToolingHost opt-in
keeps win/linux/osx on net10.0 and win-only on net10.0-windows.
Also fix the Tests SDK runtime filter to normalize '\'->'/': Replace('/','\')
yields a double backslash, which would drop the matching RID's natives on
forward-slash paths.
- single generated overlay (was Worktree.cs + NuGet.cs) swapped in by one SDK target
- base PublicVersion is an implausible sentinel (4.4.65534), decoupled from the floor, so a non-overlaid build is obvious; the overlay is always emitted
- generator runs on CI too (empty suffix via NoLedgerSuffix); release task fails on a no-tag fallback (StrideAllowFloorVersion opts in)
- share the NuGet version derivation via Stride.NuGetVersion.props (dedup PackageInfo + Templates.Common)
Renames the package id, assembly, build targets and namespaces. The package upgrader rewrites the PackageReference id and normalizes its asset flow to build;buildTransitive for projects coming from <4.4. Removes the now-unused PackAssets MSBuild task.
Test projects now set <TargetFramework(s)> from props-time sets (StrideTestTargetFrameworks
[/MacOS]) computed from StrideTestPlatforms, instead of the targets-time expansion in the
Tests SDK. TargetFrameworks are identical across platform configs (verified); the literal
element makes Roslyn MSBuildWorkspace tooling treat tests as SDK-style. Tests that already
declared a TargetFramework are untouched.
Runtime assemblies now set <TargetFrameworks> from precomputed props-time sets
(StrideRuntimeTargetFrameworks[/Windows/MacOS]) instead of the StrideRuntime
boolean expanded in Stride.Frameworks.targets. Behaviour is identical (verified
across platform configs); the literal element makes Roslyn MSBuildWorkspace
tooling (LSPs, analyzers) treat them as SDK-style.
pack-assets writes the host-loadable assembly (lib/<host-tfm>/<name>.dll) into the
packed sdpkg's AssetAssemblies; the manifest-mode consumer prefers those over the
lock file's runtime assemblies (falling back when a package predates the member).
Engine runtime asset packages declare StrideAssetAssembly=true so their packed
sdpkgs carry the entry. Validated: pack-assets + the pack target emit the entry for
Stride.Engine, and the consumer honors it (engine packages also stay robust via the
compiler's own assembly closure).
TemplatePreprocessor copies MyTemplate.{Platform}/ from a reference template
(NewGame) at pack time for any platform the sample didn't author by hand.
NewGame's library dir renamed MyTemplate/ → MyTemplate.Game/ to unify the
naming with samples so injected csprojs reference the right sibling verbatim.