我有一个包含以下项目的VS解决方案,以便可以在iOS和Windows之间共享UI代码:
运行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>
答案 0 :(得分:0)
答案 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可以找到的资源。