Исключение из Avalonia "Невозможно найти представление для <имя класса>" - PullRequest
0 голосов
/ 22 января 2019

У меня есть решение VS со следующими проектами, чтобы я мог обмениваться кодом пользовательского интерфейса между iOS и Windows:

  • MyApp.UI.Avalonia - библиотека стандартных классов .NET с пакетом nuget Avalonia
    • содержит файлы XAML / CS для пользовательского интерфейса
  • MyApp.iOS - проект Xamarin для iOS, с пакетами nuget Avalonia и Avalonia.iOS
    • Зависит от
  • MyApp.Windows - проект приложения Windows, созданный из шаблона проекта Avalonia (с удаленными файлами XAML)

Когда я запускаю приложение Windows, я получаюисключение в моем классе App при вызове AvaloniaXamlLoader.Load (this): System.IO.FileNotFoundException: 'Unable to find view for MyApp.App

Похоже, что при попытке найти App.xaml, соответствующий XAML-файл в файле App.cs, происходит сбой.Это делается путем поиска ресурса с URL-адресом, например, «avares: /! AvaloniaResourceXamlInfo».Когда я отлаживаю этот процесс в проекте ControlCatalog решения Avalonia, он находит ресурс с этим именем в общей сборке библиотеки классов ControlCatalog, и внутри этого ресурса он находит все файлы и активы XAML.

Я заметил разницу между моим проектом и его проектом в том, что когда я щелкаю правой кнопкой мыши по проекту и выбираю Add -> Item -> User Control (Avalonia), он создает XAML-файл, оборачивающий CS-файл в их проекте,но в моем проекте он создает два файла просто бок о бок.Какие настройки проекта мне не хватает, чтобы получить файлы XAML в этот волшебный ресурс! AvaloniaResourceXamlInfo?

Обновление: Хотя я все еще получаю ту же ошибку, я смог получить xaml.cs-файлы для инкапсуляции соответствующих .cs-файлов (так что, очевидно, это не единственная проблема) путем добавления следующего в мой файл .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>

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Проект запустился без ошибок, как только я вручную добавил в файл .csproj проекта библиотеки .NET Standard, общий для проектов приложений Windows и iOS:

<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.

0 голосов
/ 22 января 2019

Вы пытались изменить свойство файла?

csproj file

...