dotnet build UnityExtension/UnityExtension.csproj -c Debug -p:Platform=x64
dotnet build UnityExtension/UnityExtension.csproj -c Release -p:Platform=x64For packaged MSIX output (local dev — no thumbprint needed, GenerateTemporaryStoreCertificate in csproj handles it):
dotnet build UnityExtension/UnityExtension.csproj -c Release -p:Platform=x64 -p:GenerateAppxPackageOnBuild=true -p:AppxBundle=Always -p:AppxBundlePlatforms="x64|arm64" -p:SuppressSdkNoise=trueTrim / AOT notes:
IL2081/IL2104fromABI.Windows.Foundation.*,ABI.System.Collections.Generic.*,WinRT.Marshaler<...>— known CsWinRT / Windows SDK projection warnings.- Treated as non-fatal via
WarningsNotAsErrorsbut still appear in build output. - CsWinRT / Windows SDK projection noise suppressed by default for local publishes via
SuppressSdkNoise=true. - Use
-p:SuppressSdkNoise=falseto review full trim / AOT warning output. - Avoid broad linker suppression for release validation; verify package loads + runs in PowerToys.
dotnet test -p:Platform=x64After rebuild, reload Command Palette or restart PowerToys.
Put breakpoints in:
- command provider initialization
GetItems- command invocation paths
- project parsing
- registry lookup
- process launch helpers
Watch VS Output window, use temp logging if needed.
- Keep
UnityExtension.cs+Package.appxmanifestaligned - CLSID must match in COM server + app extension registration
- Package identity (
Name,Publisher) must match Partner Center reserved values GenerateTemporaryStoreCertificate=Truein csproj for local dev; passPackageCertificateThumbprintfor Store-signing cert- If
GenerateAppxPackageOnBuild=true, do not forceWindowsPackageType=None - Local deployment:
Add-AppxPackage -Registeragainst debugAppxManifest.xml - Prefer current Microsoft Learn packaging guidance over old repo scripts
Update in order — NuGet first (highest-impact, affects compilation and SDK targets), then local tools, then pre-commit hooks.
All version pins live in Directory.Packages.props (central package management).
dotnet-outdated.exe UnityExtension/UnityExtension.csproj --upgrade --pre-release Auto --include-auto-references --include-up-to-dateReview the diff before moving on: git diff -- Directory.Packages.props
Package-specific notes:
| Package | Note |
|---|---|
Microsoft.CommandPalette.Extensions |
Date-versioned, tied to installed PowerToys build. Only bump when targeting a newer PowerToys release. |
Microsoft.WindowsAppSDK |
Major bumps may require WinUI/packaging changes. Check release notes. |
Microsoft.Windows.CsWinRT |
Must stay compatible with Microsoft.WindowsAppSDK. Bumping either without the other can break AOT/trim. |
Microsoft.Windows.SDK.BuildTools |
New SDK major (e.g. 10.0.26100.x → 10.0.27000.x) triggers SDK target updates — see below. |
StyleCop.Analyzers |
Pre-release track; --pre-release Auto picks up new betas automatically. |
--local is required. Without it, dotnet tool update targets the global manifest, not dotnet-tools.json.
dotnet tool update --local csharpier
dotnet tool update --local minver-cli
dotnet tool restoreAdapt the list if new tools appear in dotnet-tools.json.
pre-commit autoupdate
pre-commit run --all-filesInspect the diff — major hook version bumps (especially gitleaks) can introduce breaking config changes.
Only needed when Microsoft.Windows.SDK.BuildTools moves to a new Windows SDK major (e.g. 10.0.26100.x → 10.0.27000.x). Minor/patch bumps within the same base: no action needed.
UnityExtension/UnityExtension.csproj: update thewindows10.0.NNNNN.0suffix inTargetFramework. LeaveSupportedOSPlatformVersionalone.UnityExtension/Package.appxmanifest: updateMaxVersionTestedon each<TargetDeviceFamily>. LeaveMinVersionandIdentity Versionalone.
Always run a debug build after updates:
dotnet build UnityExtension/UnityExtension.csproj -c Debug -p:Platform=x64If Microsoft.WindowsAppSDK or Microsoft.Windows.CsWinRT changed, also run a release build to catch trim/AOT regressions:
dotnet build UnityExtension/UnityExtension.csproj -c Release -p:Platform=x64 -p:SuppressSdkNoise=false