运行 您的应用在 Raspberry Pi 上 Raspbian Lite

Running your app on a Raspberry Pi with Raspbian Lite

我无法处理 运行 raspbian lite 上的 avalonia 应用程序。我正在使用 raspberry 3b + 和 RaspbianLite OS。我正在使用本教程:

https://docs.avaloniaui.net/guides/deep-dives/running-on-raspbian-lite-via-drm

抱歉,我收到这个错误:

AXN0002 - XamlX.XamlParseException: Unable to resolve type MainView from namespace clr-namespace:AvaloniaRaspbianLiteDrm row 10, position 4

这是我的主窗口的样子:

<Window xmlns="https://github.com/avaloniaui"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:avaloniaRaspbianLiteDrm="clr-namespace:AvaloniaRaspbianLiteDrm"
        mc:Ignorable="d"
        d:DesignWidth="800"
        d:DesignHeight="450"
        x:Class="AvaloniaRaspbianLiteDrm.Views.MainWindow"
        Title="AvaloniaRaspbianLiteDrm">
  <avaloniaRaspbianLiteDrm:MainView/>
</Window>

MainSingleView:

<UserControl xmlns="https://github.com/avaloniaui"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             xmlns:avaloniaRaspbianLiteDrm="clr-namespace:AvaloniaRaspbianLiteDrm"
             mc:Ignorable="d"
             d:DesignWidth="800"
             d:DesignHeight="450"
             x:Class="AvaloniaRaspbianLiteDrm.Views.MainSingleView">
  <avaloniaRaspbianLiteDrm:MainView/>
</UserControl>

主视图:

<UserControl xmlns="https://github.com/avaloniaui"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             mc:Ignorable="d"
             d:DesignWidth="800"
             d:DesignHeight="450"
             x:Class="AvaloniaRaspbianLiteDrm.Views.MainView">
  <StackPanel HorizontalAlignment="Center"
              VerticalAlignment="Center"
              Margin="30"
              Spacing="30">
    <TextBlock FontSize="25">
      Welcome to Avalonia! The best XAML framework ever ♥
    </TextBlock>
    <Slider />
  </StackPanel>
</UserControl>

Program.cs :

using Avalonia;
using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.ReactiveUI;
using System;
using System.Linq;
using System.Threading;

namespace AvaloniaRaspbianLiteDrm
{
    internal class Program
    {
        // Initialization code. Don't use any Avalonia, third-party APIs or any
        // SynchronizationContext-reliant code before AppMain is called: things aren't initialized
        // yet and stuff might break.
        [STAThread]
        public static int Main(string[] args)
        {
            var builder = BuildAvaloniaApp();
            if (args.Contains("--drm"))
            {
                SilenceConsole();
                return builder.StartLinuxDrm(args);
            }

            return builder.StartWithClassicDesktopLifetime(args);
        }

        private static void SilenceConsole()
        {
            new Thread(() =>
            {
                Console.CursorVisible = false;
                while (true)
                    Console.ReadKey(true);
            })
            { IsBackground = true }.Start();
        }

        // Avalonia configuration, don't remove; also used by visual designer.
        public static AppBuilder BuildAvaloniaApp()
            => AppBuilder.Configure<App>()
                .UsePlatformDetect()
                .LogToTrace()
                .UseReactiveUI();
    }
}

App.xaml.cs:

using Avalonia;
using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.Markup.Xaml;
using AvaloniaRaspbianLiteDrm.ViewModels;
using AvaloniaRaspbianLiteDrm.Views;

namespace AvaloniaRaspbianLiteDrm
{
    public partial class App : Application
    {
        public override void Initialize()
        {
            AvaloniaXamlLoader.Load(this);
        }

        public override void OnFrameworkInitializationCompleted()
        {
            if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
               desktop.MainWindow = new MainWindow();
          
            else if (ApplicationLifetime is ISingleViewApplicationLifetime singleView)
                singleView.MainView = new MainSingleView();

            base.OnFrameworkInitializationCompleted();
        }
    }
}

消息是在 avaloniaRaspbianLiteDrm 命名空间中找不到 MainView

正如我在您的示例中所见,MainView(如 x:Class="AvaloniaRaspbianLiteDrm.Views.MainView 所示)位于 AvaloniaRaspbianLiteDrm.Views 命名空间内。您可能忘记了 Views 命名空间。

您或许应该更改

xmlns:avaloniaRaspbianLiteDrm="clr-namespace:AvaloniaRaspbianLiteDrm"

xmlns:avaloniaRaspbianLiteDrm="clr-namespace:AvaloniaRaspbianLiteDrm.Views"

确保代码隐藏文件 MainView.xaml.cs 也使用 AvaloniaRaspbianLiteDrm.Views 命名空间。