Skip to main content

Installation

Intune Commander is distributed as source code and can be built and run using the .NET 10 SDK. This guide covers building from source, running the application, and platform-specific considerations.

Building from Source

Clone the Repository

1

Clone from GitHub

Clone the Intune Commander repository:
git clone https://github.com/yourusername/intune-commander.git
cd intune-commander
2

Verify .NET SDK

Ensure you have .NET 10 SDK installed:
dotnet --version
The output should show version 10.0.x or higher.

Build the Application

1

Restore dependencies

Restore NuGet packages for all projects:
dotnet restore
This downloads all required dependencies including:
  • Avalonia 11.3.x
  • Microsoft.Graph.Beta 5.130.x
  • Azure.Identity 1.17.x
  • LiteDB 5.0.x
  • And other packages
2

Build all projects

Build the solution:
dotnet build
This compiles:
  • Intune.Commander.Core (business logic library)
  • Intune.Commander.Desktop (Avalonia UI application)
  • Test projects
3

Verify the build

Ensure the build completed successfully with no errors. You should see output similar to:
Build succeeded.
    0 Warning(s)
    0 Error(s)

Run Unit Tests

Verify the build by running unit tests:
# Run all unit tests (excludes integration tests)
dotnet test --filter "Category!=Integration"

# Run tests with coverage (40% threshold enforced)
dotnet test /p:CollectCoverage=true /p:Threshold=40 /p:ThresholdType=line /p:ThresholdStat=total

# Run a specific test class
dotnet test --filter "FullyQualifiedName~ProfileServiceTests"
Integration tests require Azure AD credentials and are skipped by default. See the repository documentation for integration test setup.

Running the Application

Development Mode

Run directly from source using the .NET CLI:
dotnet run --project src/Intune.Commander.Desktop
The application window will launch and display the login screen.

Debug Configuration

When running in Debug mode, you get:
  • Verbose debug logging in the Debug Log window
  • Source maps for easier troubleshooting
  • No code optimizations
  • Full exception details

Release Build

For better performance, build in Release configuration:
# Build release version
dotnet build --configuration Release

# Run release version
dotnet run --project src/Intune.Commander.Desktop --configuration Release
Release mode provides:
  • Optimized compiled code
  • Smaller binary size
  • Faster startup and runtime performance
  • Information-level logging only

Platform-Specific Notes

Windows (Fully Supported)

Windows 10 1809+ is the recommended and fully supported platform with all features available.
Installation Steps:
  1. Install .NET 10 SDK from dotnet.microsoft.com
  2. Clone and build as described above
  3. Run using dotnet run --project src/Intune.Commander.Desktop
Features Available:
  • ✅ Interactive browser authentication
  • ✅ Client secret authentication
  • ✅ All Intune object type management
  • ✅ PowerPoint export
  • ✅ LiveCharts dashboards
  • ✅ Local encrypted cache and profile storage
File Locations:
  • Profiles: %LOCALAPPDATA%\Intune.Commander\profiles.json
  • Cache: %LOCALAPPDATA%\Intune.Commander\cache.db
  • Cache encryption key: %LOCALAPPDATA%\Intune.Commander\cache-key.bin
  • Data Protection keys: %LOCALAPPDATA%\Intune.Commander\keys\

macOS (Limited Support)

macOS has significant Avalonia limitations that affect authentication and UI behavior.
Known Limitations:
  • Interactive browser authentication does not work reliably due to Avalonia browser integration issues
  • Device Code authentication is required instead of browser popup
  • Some UI rendering differences compared to Windows
Recommended Setup:
  1. Install .NET 10 SDK:
    brew install dotnet@10
    
  2. Clone and build:
    git clone https://github.com/yourusername/intune-commander.git
    cd intune-commander
    dotnet build
    
  3. Use Client Secret authentication instead of Interactive:
    • Create a client secret in your Azure AD app registration
    • Configure your profile with authMethod: "ClientSecret"
    • Provide the client secret in the profile
File Locations:
  • Profiles: ~/Library/Application Support/Intune.Commander/profiles.json
  • Cache: ~/Library/Application Support/Intune.Commander/cache.db
  • Cache encryption key: ~/Library/Application Support/Intune.Commander/cache-key.bin
  • Data Protection keys: ~/Library/Application Support/Intune.Commander/keys/

Linux (Planned)

Linux support is planned but currently limited. Initial support will focus on headless/Core scenarios.
Current Status:
  • Core libraries (Intune.Commander.Core) are fully compatible
  • Desktop UI (Avalonia) has not been tested on Linux
  • Planned use case: Scheduled report generation without UI
Expected File Locations:
  • Profiles: ~/.config/Intune.Commander/profiles.json
  • Cache: ~/.config/Intune.Commander/cache.db
  • Cache encryption key: ~/.config/Intune.Commander/cache-key.bin
  • Data Protection keys: ~/.config/Intune.Commander/keys/
Future Plans:
  • Headless mode for automated exports
  • CLI interface for scripting
  • Docker container for scheduled tasks

Self-Contained Deployment

For distribution to machines without .NET SDK installed, create a self-contained deployment:

Windows x64

dotnet publish src/Intune.Commander.Desktop \
  --configuration Release \
  --runtime win-x64 \
  --self-contained true \
  --output ./publish/win-x64
This creates a standalone executable with all dependencies included:
  • Intune.Commander.Desktop.exe
  • .NET runtime libraries
  • All NuGet package dependencies

macOS x64

dotnet publish src/Intune.Commander.Desktop \
  --configuration Release \
  --runtime osx-x64 \
  --self-contained true \
  --output ./publish/osx-x64

macOS ARM64 (Apple Silicon)

dotnet publish src/Intune.Commander.Desktop \
  --configuration Release \
  --runtime osx-arm64 \
  --self-contained true \
  --output ./publish/osx-arm64
Self-contained deployments are larger (150-200 MB) but don’t require .NET SDK installation on the target machine.

Syncfusion License Configuration

The PowerPoint export feature uses Syncfusion.Presentation.Net.Core, which requires a license key.

For Development Builds

Set the license key as an environment variable before building: Windows (PowerShell):
$env:SYNCFUSION_LICENSE_KEY="your-license-key-here"
dotnet build
Linux/macOS:
export SYNCFUSION_LICENSE_KEY="your-license-key-here"
dotnet build

For Published Releases

Embed the license key during publish:
dotnet publish src/Intune.Commander.Desktop \
  --configuration Release \
  --runtime win-x64 \
  --self-contained true \
  -p:SyncfusionLicenseKey="your-license-key-here" \
  --output ./publish/win-x64
Official release binaries have the license key embedded during the GitHub Actions build process. End users do not need to configure a license.
Without a license key, PowerPoint exports will display watermarks. All other functionality remains unaffected.

Troubleshooting Build Issues

Build Fails with NuGet Restore Errors

Solution: Clear the NuGet cache and restore:
dotnet nuget locals all --clear
dotnet restore
dotnet build

Microsoft.Graph.Beta Package Not Found

Solution: Ensure you’re using .NET 10 SDK and have access to nuget.org:
dotnet --version  # Should be 10.0.x
dotnet nuget list source  # Verify nuget.org is listed

Avalonia Designer Issues in Visual Studio

Solution: Avalonia XAML designer requires the Avalonia extension:
  1. Install “Avalonia for Visual Studio 2022” from Extensions → Manage Extensions
  2. Restart Visual Studio
  3. Open .axaml files to see the designer

macOS Code Signing Issues

Solution: For development builds, you don’t need code signing:
dotnet build --configuration Debug
dotnet run --project src/Intune.Commander.Desktop
For published apps, see Apple’s documentation on code signing requirements.

Next Steps

Now that you have Intune Commander built and running:

App Registration

Set up Azure AD app registrations for authentication

Quickstart Guide

Configure your first profile and connect to a tenant

Prerequisites

Review system and permission requirements

Contributing

Learn how to contribute to Intune Commander development

Build docs developers (and LLMs) love