Avalonia异常“无法找到<class name =“”>”的视图

时间:2019-01-22 02:04:11

标签: c# xaml xamarin avaloniaui

我有一个包含以下项目的VS解决方案,以便可以在iOS和Windows之间共享UI代码:

  • MyApp.UI.Avalonia-具有Avalonia nuget包的.NET标准类库
    • 包含用于UI的XAML / CS文件
  • MyApp.iOS-Xamarin iOS项目,带有Avalonia和Avalonia.iOS nuget包
    • 取决于
  • MyApp.Windows-从Avalonia项目模板创建的Windows应用程序项目(已删除XAML文件)

运行Windows应用程序时,我在App类中调用AvaloniaXamlLoader.Load(this)时遇到异常:System.IO.FileNotFoundException: 'Unable to find view for MyApp.App

当尝试查找App.xaml(与App.cs文件对应的XAML文件)时,似乎失败了。它通过查找带有URL的资源(例如“ avares:/ !! AvaloniaResourceXamlInfo”)来实现。当我在Avalonia解决方案的ControlCatalog项目中调试此过程时,它确实在共享的ControlCatalog类库程序集中通过此名称找到了资源,并且在该资源内找到了所有XAML文件和资产。

我注意到他们的项目与他们的项目之间的区别是,当我右键单击该项目并选择“添加”->“项目”->“用户控制”(Avalonia)时,它将创建一个XAML文件,将CS文件包装在他们的项目中,但是在我的项目中项目它仅并排创建两个文件。我缺少将XAML文件放入此神奇的“!AvaloniaResourceXamlInfo”资源中的哪个项目设置?

更新: 虽然我仍然遇到相同的错误,但是通过手动将以下内容添加到我的.csproj文件中,我能够获取xaml.cs文件来封装相应的.cs文件(显然这不是唯一的问题)。在ControlCatalog示例项目中):

  <ItemGroup>
    <Compile Update="**\*.xaml.cs">
      <DependentUpon>%(Filename)</DependentUpon>
    </Compile>
    <AvaloniaResource Include="**\*.xaml">
      <SubType>Designer</SubType>
    </AvaloniaResource>
    <AvaloniaResource Include="Assets\*" />
    <AvaloniaResource Include="Assets\Fonts\*" />
  </ItemGroup>

3 个答案:

答案 0 :(得分:0)

您是否尝试过更改文件的属性?

csproj file

答案 1 :(得分:0)

确保将命名空间与此项目中的路径对齐。

Avalonia 似乎有点挑剔。

尽管 .Net 允许命名空间和路径不同

答案 2 :(得分:-1)

将以下内容手动添加到Windows和iOS应用程序项目共享的.NET Standard库项目的.csproj文件后,该项目运行无误:

<ItemGroup>
    <Compile Update="**\*.xaml.cs">
        <DependentUpon>%(Filename)</DependentUpon>
    </Compile>
    <EmbeddedResource Include="**\*.xaml">
        <SubType>Designer</SubType>
    </EmbeddedResource>
    <AvaloniaResource Include="**\*.xaml">
        <SubType>Designer</SubType>
    </AvaloniaResource>
    <AvaloniaResource Include="Assets\*" />
    <AvaloniaResource Include="Assets\Fonts\*" />
</ItemGroup>

看起来像<Compile ...标签将cs文件封装到xaml.cs文件中,其余的将xaml文件嵌入为Avalonia可以找到的资源。