Files
logikonline 840ad0ce8f
All checks were successful
CI / Build (Linux) (pull_request) Successful in 23s
chore(perf): realign version to 9.0.0 to match .NET/MAUI versioning
Change version from 1.0.0 to 9.0.0 to align with .NET 9 / MAUI 9.0.x versioning convention. Update all package references, templates, and documentation. Change copyright holder from "MarketAlly LLC" to "MarketAlly Pte Ltd" across all files. Update CHANGELOG to document version realignment and mark 1.0.0 as deprecated. Update release notes to reflect 541 passing tests (up from 217) and include native resource leak fixes, SafeHandle wrappers, and performance benchmarks.
2026-03-07 00:14:47 -05:00

308 lines
7.4 KiB
Markdown

# Frequently Asked Questions
## Visual Studio Integration
### How do I add Linux support to my existing MAUI project?
Unlike Android, iOS, and Windows which appear in Visual Studio's platform dropdown, Linux requires manual configuration since it's a community platform.
**Step 1: Add the NuGet Package**
```bash
dotnet add package OpenMaui.Controls.Linux
```
Or in Visual Studio: Right-click project → Manage NuGet Packages → Search "OpenMaui.Controls.Linux"
**Step 2: Create a Linux Startup Project**
Create a new folder called `Platforms/Linux` in your project and add a `Program.cs`:
```csharp
using OpenMaui.Platform.Linux;
namespace MyApp.Platforms.Linux;
public class Program
{
public static void Main(string[] args)
{
var app = new LinuxApplication();
app.MainPage = new MainPage(); // Your existing MainPage
app.Run();
}
}
```
**Step 3: Add a Linux Build Configuration**
Add to your `.csproj`:
```xml
<PropertyGroup Condition="'$(Configuration)|$(TargetFramework)'=='Debug|net9.0'">
<RuntimeIdentifier>linux-x64</RuntimeIdentifier>
</PropertyGroup>
```
Or create a separate `MyApp.Linux.csproj` that references your shared code.
---
### Why doesn't Linux appear in Visual Studio's platform dropdown?
Visual Studio's MAUI tooling only shows platforms officially supported by Microsoft (.NET MAUI team). Linux is a community-supported platform through OpenMaui.
**Workarounds:**
1. **Use a separate Linux project** - Create a dedicated `MyApp.Linux` console project
2. **Use VS Code** - Better cross-platform support with command-line builds
3. **Use JetBrains Rider** - Excellent Linux and cross-platform support
4. **Command line** - `dotnet build -r linux-x64` works from any IDE
---
### How do I build for Linux from Visual Studio on Windows?
**Option A: Command Line (Recommended)**
Open Terminal in VS and run:
```bash
dotnet build -c Release -r linux-x64
dotnet publish -c Release -r linux-x64 --self-contained
```
**Option B: Custom Build Profile**
1. Right-click solution → Properties → Configuration Manager
2. Create a new configuration called "Linux"
3. Edit project properties to set RuntimeIdentifier for this configuration
**Option C: WSL Integration**
If you have WSL (Windows Subsystem for Linux) installed:
```bash
wsl dotnet build
wsl dotnet run
```
---
### How do I debug Linux apps from Windows?
**Option 1: Remote Debugging**
1. Install `vsdbg` on your Linux machine
2. Configure remote debugging in VS/VS Code
3. Attach to the running process
**Option 2: WSL (Recommended for development)**
1. Install WSL 2 with Ubuntu
2. Install .NET SDK in WSL
3. Run your app in WSL with X11 forwarding:
```bash
export DISPLAY=:0
dotnet run
```
4. Use WSLg (Windows 11) for native GUI support
**Option 3: Virtual Machine**
1. Set up a Linux VM (VMware, VirtualBox, Hyper-V)
2. Share your project folder
3. Build and run inside the VM
---
## Project Structure
### What's the recommended project structure for cross-platform MAUI with Linux?
```
MyApp/
├── MyApp.sln
├── MyApp/ # Shared MAUI project
│ ├── MyApp.csproj
│ ├── App.xaml
│ ├── MainPage.xaml
│ ├── Platforms/
│ │ ├── Android/
│ │ ├── iOS/
│ │ ├── Windows/
│ │ └── Linux/ # Add this folder
│ │ └── Program.cs
│ └── ...
└── MyApp.Linux/ # Optional: Separate Linux project
├── MyApp.Linux.csproj
└── Program.cs
```
### Should I use a separate project or add Linux to my existing project?
**Add to existing project** if:
- You want a single codebase
- Your MAUI code is mostly XAML-based
- You're comfortable with conditional compilation
**Use a separate project** if:
- You want cleaner separation
- You need Linux-specific features
- You want independent build/deploy cycles
- Your team includes Linux specialists
---
## Build & Deploy
### How do I create a Linux executable?
```bash
# Self-contained (includes .NET runtime)
dotnet publish -c Release -r linux-x64 --self-contained -o ./publish
# Framework-dependent (smaller, requires .NET on target)
dotnet publish -c Release -r linux-x64 --no-self-contained -o ./publish
```
For ARM64 (Raspberry Pi, etc.):
```bash
dotnet publish -c Release -r linux-arm64 --self-contained -o ./publish
```
### How do I create a .deb or .rpm package?
We recommend using packaging tools:
**For .deb (Debian/Ubuntu):**
```bash
dotnet tool install -g dotnet-deb
dotnet deb -c Release -r linux-x64
```
**For .rpm (Fedora/RHEL):**
```bash
dotnet tool install -g dotnet-rpm
dotnet rpm -c Release -r linux-x64
```
**For AppImage (Universal):**
Use [AppImageKit](https://appimage.org/) with your published output.
**For Flatpak:**
Create a flatpak manifest and build with `flatpak-builder`.
---
## Common Issues
### "SkiaSharp native library not found"
Install the required native libraries:
**Ubuntu/Debian:**
```bash
sudo apt-get install libfontconfig1 libfreetype6
```
**Fedora:**
```bash
sudo dnf install fontconfig freetype
```
### "Cannot open display" or "No display server"
Ensure X11 or Wayland is running:
```bash
echo $DISPLAY # Should show :0 or similar
echo $WAYLAND_DISPLAY # For Wayland
```
For headless/SSH sessions:
```bash
export DISPLAY=:0 # If X11 is running
```
### "libX11.so not found"
Install X11 development libraries:
**Ubuntu/Debian:**
```bash
sudo apt-get install libx11-6 libx11-dev
```
### App runs but window doesn't appear
Check if you're running under Wayland without XWayland:
```bash
# Force X11 mode
export GDK_BACKEND=x11
./MyApp
```
---
## IDE Recommendations
### What's the best IDE for developing MAUI apps with Linux support?
| IDE | Linux Dev | Windows Dev | Pros | Cons |
|-----|-----------|-------------|------|------|
| **VS Code** | ⭐⭐⭐ | ⭐⭐⭐ | Cross-platform, lightweight, great C# extension | No visual XAML designer |
| **JetBrains Rider** | ⭐⭐⭐ | ⭐⭐⭐ | Excellent cross-platform, powerful refactoring | Paid license |
| **Visual Studio** | ⭐ | ⭐⭐⭐ | Best MAUI tooling on Windows | No native Linux support |
| **Visual Studio Mac** | ⭐⭐ | N/A | Good MAUI support | macOS only |
**Our recommendation:**
- **Windows developers:** Visual Studio for Android/iOS/Windows, VS Code or command line for Linux builds
- **Linux developers:** JetBrains Rider or VS Code
- **Cross-platform teams:** VS Code with standardized build scripts
---
## Continuous Integration
### How do I set up CI/CD for Linux builds?
**GitHub Actions example:**
```yaml
jobs:
build-linux:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-dotnet@v4
with:
dotnet-version: '9.0.x'
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y libx11-dev libfontconfig1-dev
- name: Build
run: dotnet build -c Release
- name: Publish
run: dotnet publish -c Release -r linux-x64 --self-contained -o ./publish
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: linux-app
path: ./publish
```
---
## Getting Help
- **GitHub Issues:** https://github.com/open-maui/maui-linux/issues
- **Discussions:** https://github.com/open-maui/maui-linux/discussions
- **Documentation:** https://github.com/open-maui/maui-linux/tree/main/docs
---
*Developed by [MarketAlly Pte Ltd](https://marketally.com) • Lead Architect: David H. Friedel Jr.*