6.1 KiB
6.1 KiB
Ursa.Avalonia
Ursa.Avalonia is an enterprise-level UI library for building cross-platform applications with Avalonia UI. This is a .NET 8.0 library that provides advanced UI controls and themes for Avalonia applications.
Always reference these instructions first and fallback to search or bash commands only when you encounter unexpected information that does not match the info here.
Working Effectively
Prerequisites and Setup
- Requires .NET 8.0 SDK (minimum 8.0.0). Check version with
dotnet --version - Install required workloads for full functionality:
dotnet workload restore-- installs wasi-experimental workload automaticallydotnet workload install wasm-tools-- required for browser demos. Takes 30-60 seconds.- Mobile workloads (Android/iOS) may not be available in all environments
Building the Library
- Use the provided build scripts for core libraries:
- Linux/macOS:
./build.sh-- builds core Ursa libraries. NEVER CANCEL. Takes ~26 seconds. Set timeout to 120+ seconds. - Windows:
./build.ps1-- builds core Ursa libraries
- Linux/macOS:
- Build specific projects:
- Core library:
dotnet build src/Ursa/Ursa.csproj - Themes:
dotnet build src/Ursa.Themes.Semi/Ursa.Themes.Semi.csproj - Prism extension:
dotnet build src/Ursa.PrismExtension/Ursa.PrismExtension.csproj
- Core library:
- Build entire solution (excluding mobile):
dotnet build-- may fail on mobile projects without workloads
Running Demo Applications
- Desktop demo:
dotnet run --project demo/Ursa.Demo.Desktop/Ursa.Demo.Desktop.csproj-- NEVER CANCEL. Build takes ~22 seconds. Set timeout to 120+ seconds.- Cannot run in headless environments (will fail with XOpenDisplay error)
- Browser demo:
- Build:
dotnet build demo/Ursa.Demo.Browser/Ursa.Demo.Browser.csproj-- NEVER CANCEL. Takes ~14 seconds. Set timeout to 120+ seconds. - Serve locally:
python3 -m http.server 8000 --directory demo/Ursa.Demo.Browser/bin/Debug/net8.0-browser/ - Access at:
http://127.0.0.1:8000
- Build:
- Sandbox project:
dotnet run --project demo/Sandbox/Sandbox.csproj-- minimal test environment
Testing
- Unit tests:
dotnet test tests/Test.Ursa-- NEVER CANCEL. Takes ~13 seconds, runs 66 tests. Set timeout to 60+ seconds. - Headless tests:
dotnet test tests/HeadlessTest.Ursa-- NEVER CANCEL. Takes ~29 seconds, runs 584 tests. Set timeout to 120+ seconds. - Both test suites should pass completely in a properly configured environment
Validation Steps
- Always run these commands after making changes:
./build.shto validate core library buildsdotnet test tests/Test.Ursa && dotnet test tests/HeadlessTest.Ursato validate functionality
- Test browser demo functionality by building and serving locally
- Verify mobile demo builds work if mobile workloads are available
Repository Structure
Key Directories
/src/-- Core library source codeUrsa/-- Main UI library (netstandard2.0 and net8.0)Ursa.Themes.Semi/-- Semi Design theme packageUrsa.PrismExtension/-- Prism.Avalonia integrationUrsa.ReactiveUIExtension/-- ReactiveUI integration
/demo/-- Example applicationsUrsa.Demo/-- Shared demo codeUrsa.Demo.Desktop/-- Desktop application (Windows/Linux/macOS)Ursa.Demo.Browser/-- WebAssembly browser applicationUrsa.Demo.Android/-- Android application (requires workloads)Ursa.Demo.iOS/-- iOS application (requires workloads)Sandbox/-- Simple test application
/tests/-- Test projectsTest.Ursa/-- Unit tests (66 tests)HeadlessTest.Ursa/-- Headless UI tests (584 tests)
Important Files
global.json-- Specifies .NET 8.0.0 SDK requirementUrsa.sln-- Main solution file with all projectssrc/Package.props-- Shared package properties (Avalonia 11.1.1)demo/Directory.Build.props-- Demo-specific properties (Avalonia 11.2.5)build.sh/build.ps1-- Core library build scripts
Common Development Tasks
Making Changes to Controls
- Ursa controls are located in
src/Ursa/Controls/ - Themes and styles are in
src/Ursa.Themes.Semi/ - Always test changes with both unit tests and headless tests
- Verify demo applications still function correctly
Adding New Features
- Follow existing patterns in
src/Ursa/Controls/ - Add corresponding tests in
tests/HeadlessTest.Ursa/Controls/ - Update demo applications to showcase new functionality
- Ensure compatibility with both netstandard2.0 and net8.0 targets
Working with Themes
- Semi theme implementation is in
src/Ursa.Themes.Semi/ - Reference theme in applications:
xmlns:u-semi="https://irihi.tech/ursa/themes/semi" - Theme must be included after Semi base theme in App.axaml
CI/CD Integration
- GitHub Actions are configured in
.github/workflows/ test.ymlruns on both Windows and Ubuntu- Tests include code coverage reporting
- Mobile builds may be excluded from CI in environments without workloads
Known Issues and Workarounds
Build Warnings
- Nullable reference type warnings are common and generally non-blocking
- Async method warnings in demo code are cosmetic
Platform Limitations
- Desktop applications require display server (fail in headless environments)
- Mobile applications require specific workloads that may not be available
- Browser applications require WASM workloads
Environment Dependencies
- .NET 8.0 SDK is required (specified in global.json)
- Avalonia versions differ between library (11.1.1) and demos (11.2.5)
- Some workloads may have long installation times
Troubleshooting
Build Failures
- Ensure correct .NET SDK version:
dotnet --versionshould show 8.0.x - Install missing workloads:
dotnet workload restore - Clean build artifacts:
dotnet cleanthen rebuild
Test Failures
- Verify all dependencies are installed
- Check that Avalonia themes are properly configured
- Ensure headless environment is properly set up for UI tests
Demo Issues
- Desktop demos require display server
- Browser demos need proper WASM workload installation
- Mobile demos need platform-specific workloads
Always validate that your changes work by running the full test suite and building all target projects before committing changes.