我有一个包含以下项目的 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) 时,它会在他们的项目中创建一个包含 CS 文件的 XAML 文件,但在我的项目中它会创建这两个文件只是并排的。为了将 XAML 文件放入这个神奇的“!AvaloniaResourceXamlInfo”资源中,我缺少什么项目设置?
更新: 虽然我仍然遇到同样的错误,但我能够通过手动将以下内容添加到我的 .csproj 文件(其中我在 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>