Build Scripts
Overview
The Krypton Toolkit provides Windows Command Prompt (.cmd) batch scripts for convenient building, packaging, and maintenance. Scripts are organized under Scripts/VS2022/, Scripts/Current/, and Scripts/Build/. The root run.cmd launches an interactive menu and invokes these scripts. Each script set uses a build.proj in its directory.
Core Build Scripts
build-stable.cmd
Purpose: Builds stable/release packages interactively
Usage:
cd Scripts\VS2022
build-stable.cmd [target]
Or via the interactive menu: run run.cmd from the repository root, select the Visual Studio target, then choose the build option.
Parameters:
target(optional) - MSBuild target to execute (default:Build)
Examples:
build-stable.cmd # Build only
build-stable.cmd Pack # Pack only
build-stable.cmd Clean # Clean only
Features:
- Auto-detects Visual Studio 2022 installation
- Supports Preview, Enterprise, Professional, Community, and BuildTools editions
- Displays start and end timestamps with timezone
- Creates detailed build logs in
../Logs/stable-build-log.log - Creates binary log in
../Logs/stable-build-log.binlog - Shows build summary with timestamps
- Interactive menu option to return to main menu
Visual Studio Detection Order:
- Visual Studio 2022 Preview
- Visual Studio 2022 Enterprise
- Visual Studio 2022 Professional
- Visual Studio 2022 Community
- Visual Studio 2022 BuildTools
Output:
- Text log:
Logs/stable-build-log.log - Binary log:
Logs/stable-build-log.binlog - Console summary with timing
build-canary.cmd
Purpose: Builds canary (beta) pre-release packages
Usage:
cd Scripts\VS2022
build-canary.cmd [target]
Parameters:
target(optional) - MSBuild target (default:Build)
Features:
- Same Visual Studio detection as build-stable.cmd
- Builds using
canary.proj - Outputs to
../Logs/canary-build-log.logand.binlog - Packages go to
Bin/Packages/Canary/ - Interactive menu integration
Examples:
build-canary.cmd Build # Build canary
build-canary.cmd Pack # Pack canary packages
build-nightly.cmd
Purpose: Builds nightly (alpha) bleeding-edge packages
Usage:
cd Scripts\VS2022
build-nightly.cmd [target]
Parameters:
target(optional) - MSBuild target (default:Build)
Features:
- Uses
nightly.proj - Outputs to
../Logs/nightly-build-log.logand.binlog - Packages go to
Bin/Packages/Nightly/ - Interactive menu integration
Examples:
build-nightly.cmd Build # Build nightly
build-nightly.cmd Rebuild # Clean and rebuild
build-nightly.cmd Pack # Pack nightly packages
Notes:
- Includes commented options for
-graphBuild:True(parallel project graph builds)
Utility Scripts
buildsolution.cmd
Purpose: Interactive solution builder with VS 2019/2022 support
Usage:
cd Scripts\VS2022
buildsolution.cmd [target]
Features:
- Prompts for Visual Studio version (2019 or 2022)
- Builds using
build.proj - Interactive NuGet package creation prompt
- Displays completion timestamps
Workflow:
- Select Visual Studio version
- Build completes
- Prompt: Create NuGet packages? (y/n)
- If yes, prompt for VS version for packing
- Complete
Parameters:
target(optional) - MSBuild target (default:Build)
Examples:
buildsolution.cmd # Interactive build
buildsolution.cmd Rebuild # Interactive rebuild
purge.cmd
Purpose: Cleans build artifacts and intermediate files
Usage:
cd Scripts
purge.cmd
Interactive Prompts:
You are about to delete the Bin folder; do you want to continue? (Y/N)
Deletes:
Bin/- All build outputsSource/Krypton Components/Krypton.Docking/obj/Source/Krypton Components/Krypton.Navigator/obj/Source/Krypton Components/Krypton.Ribbon/obj/Source/Krypton Components/Krypton.Toolkit/obj/Source/Krypton Components/Krypton.Workspace/obj/Logs/(if exists)
Note: Does not delete Krypton.Utilities or Krypton.Standard.Toolkit obj folders. Run from Scripts/VS2022, Scripts/Current, or Scripts/Build.
Warning: This operation is destructive and cannot be undone!
Use Cases:
- Before major version changes
- When switching between configurations
- To resolve build cache issues
- To free disk space
publish.cmd
Purpose: Simplified NuGet package publishing
Usage:
cd Scripts
publish.cmd
Workflow:
- Executes
build-stable.cmd Pack - Executes
build-stable.cmd Push
Prerequisites:
- NuGet API key must be configured
- Packages must exist in
Bin/Packages/Release/
Configuration: Set API key once:
nuget.exe setapikey <YOUR_API_KEY> -Source https://api.nuget.org/v3/index.json
main-menu.cmd
Purpose: Returns to the main build menu system
Usage:
cd Scripts
main-menu.cmd
Features:
- Changes directory to parent (
cd ..) - Executes
run.cmd(main menu launcher in repository root)
Note: Assumes run.cmd exists in the repository root. The main-menu script is in Scripts/.
Script Patterns
Visual Studio Detection Pattern
All build scripts use this pattern:
if exist "%ProgramFiles%\Microsoft Visual Studio\2022\Preview\MSBuild\Current\Bin" goto vs17prev
if exist "%ProgramFiles%\Microsoft Visual Studio\2022\Enterprise\MSBuild\Current\Bin" goto vs17ent
if exist "%ProgramFiles%\Microsoft Visual Studio\2022\Professional\MSBuild\Current\Bin" goto vs17pro
if exist "%ProgramFiles%\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin" goto vs17com
if exist "%ProgramFiles%\Microsoft Visual Studio\2022\BuildTools\MSBuild\Current\Bin" goto vs17build
echo "Unable to detect suitable environment. Check if VS 2022 is installed."
pause
goto exitbatch
:vs17prev
set msbuildpath=%ProgramFiles%\Microsoft Visual Studio\2022\Preview\MSBuild\Current\Bin
goto build
Logging Pattern
Scripts enable detailed logging:
"%msbuildpath%\msbuild.exe" /t:%targets% build.proj ^
/fl ^
/flp:logfile=../Logs/stable-build-log.log ^
/bl:../Logs/stable-build-log.binlog ^
/clp:Summary;ShowTimestamp ^
/v:quiet
Parameters:
/fl- Enable file logging/flp:logfile=<path>- Specify log file location/bl:<path>- Binary log file/clp:Summary;ShowTimestamp- Console logger parameters/v:quiet- Verbosity level
Timezone Detection
Scripts capture timezone information:
for /f "tokens=* usebackq" %%A in (`tzutil /g`) do (
set "zone=%%A"
)
Target Parameter Pattern
Scripts accept optional target parameter:
set targets=Build
if not "%~1" == "" set targets=%~1
"%msbuildpath%\msbuild.exe" /t:%targets% build.proj ...
Usage:
build-stable.cmd Pack # Sets targets=Pack
build-stable.cmd # Uses default targets=Build
Advanced Usage
Custom Logging
Add custom MSBuild parameters:
build-stable.cmd Build /v:detailed /flp:logfile=custom.log
Parallel Builds
Enable multi-core builds:
build-stable.cmd Build /m:4
Binary Log Analysis
View binary logs with MSBuild Structured Log Viewer:
# Install viewer
dotnet tool install --global MSBuildStructuredLogViewer
# Open log
msbuildlogviewer Logs/stable-build-log.binlog
Automated Builds (CI/CD)
For non-interactive automation:
@echo off
cd Scripts
REM Clean build
purge.cmd < nul
REM Build stable
echo Y | purge.cmd
build-stable.cmd Build
REM Check exit code
if %ERRORLEVEL% NEQ 0 (
echo Build failed!
exit /b %ERRORLEVEL%
)
echo Build succeeded!
Environment Requirements
Required Environment Variables
None explicitly required, but these are respected:
ProgramFiles- Visual Studio installation detectionPATH- For findingnuget.exeduring publish
Optional Environment Variables
NUGET_API_KEY- For automated package publishingMSBUILDPATH- Override MSBuild location
Setting Custom MSBuild Path
set MSBUILDPATH=C:\CustomPath\MSBuild\Current\Bin
build-stable.cmd Build
Troubleshooting
"Unable to detect suitable environment"
Cause: Visual Studio 2022 not found
Solutions:
Install Visual Studio 2022
Verify installation path:
dir "%ProgramFiles%\Microsoft Visual Studio\2022\"Manual MSBuild invocation:
"C:\Path\To\MSBuild.exe" /t:Build build.proj
Build Hangs or Stalls
Solutions:
Kill MSBuild processes:
taskkill /F /IM MSBuild.exeClean and retry:
purge.cmd build-stable.cmd Build
Incorrect Build Configuration
Cause: Cached build state
Solutions:
purge.cmd
build-stable.cmd Build
Permission Denied Errors
Cause: Files locked by IDE or antivirus
Solutions:
- Close Visual Studio
- Disable antivirus temporarily
- Run as Administrator
Best Practices
1. Always Check Logs
After any build failure:
notepad Logs\stable-build-log.log
2. Clean Between Configurations
purge.cmd
build-stable.cmd Build
3. Verify Before Publishing
build-stable.cmd Pack
# Manually inspect Bin/Packages/Release/
build-stable.cmd Push
4. Use Binary Logs for Complex Issues
build-stable.cmd Build
# If issues occur:
msbuildlogviewer Logs/stable-build-log.binlog
5. Script Automation
Create custom automation scripts:
@echo off
call build-stable.cmd Clean
call build-stable.cmd Build
call build-stable.cmd Pack
echo All operations completed!
Related Documentation
- MSBuild Project Files - Understanding .proj files
- Troubleshooting - Common issues
- ModernBuild Tool - Alternative TUI tool