0

我有一个包含以下项目的 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>
4

3 回答 3

0

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

Avalonia 似乎对此有些挑剔。

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

于 2021-01-03T17:37:07.303 回答
0

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

csproj 文件

于 2019-01-22T03:07:54.197 回答
-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 可以找到的资源。

于 2019-01-22T17:15:06.273 回答