Имя «AppClass» не существует в пространстве имен «...» при наследовании класса приложения UWP от другого класса на основе приложения - PullRequest
0 голосов
/ 10 июня 2018

Чего я хочу добиться, так это просто унаследовать класс приложения UWP не от класса Windows.UI.Xaml.Application, а от некоторого базового класса, унаследованного от «стандартного».

Однако, когда ясделать это:

namespace MyNamespace
{
    sealed partial class App : MyUwpBaseApplication
    {
        public App()
        {
            this.InitializeComponent();
        }
    }
}

и xaml:

<local:MyUwpBaseApplication
    x:Class="MyNamespace.App"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:MyNamespace">

</local:MyUwpBaseApplication>

Я получаю и: ошибка времени разработки в конструкторе XAML, и ошибку компиляции:

Ошибка XDG0008 Имя «MyUwpBaseApplication» не существует в пространстве имен «using: MyNamespace».MyNamespace App.xaml 1

Мне нужен базовый класс для использования MvvmCross и Xamarin.Forms.Но ошибка, которую я получаю, является общей, не связанной ни с одной из них.

Visual Studio: 15.7.Windows: 10 Fall Creators Update.

Как я могу справиться с этим?

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

Ситуация становится довольно странной, когда вы переходите к разработке UWP, особенно если учесть, что это разработка на платформе Windows Native (привет, Microsoft!)

Но Visual Studio действительно очень "капризен" с XAML в целом и UWPв частности.

Я до сих пор не знаю точную причину, что вы должны сделать с проектом, чтобы сделать эту работу, , но решение определенно находится где-то среди этих подсказок .

В нем определенно есть что-то с:

  • при запуске Visual Studio от имени администратора
  • удаление bin, obj-папок
  • очистка раствора
  • перестройка проекта

По крайней мере, после всех этих операций проект теперь компилируется достаточно хорошо (и всегда, независимо от того, существует bin или obj).Итак, я считаю, что это может быть что-то с некоторым кэшированием встроенных двоичных файлов где-то еще (кроме папки проекта).

Одной из возможных причин было одновременное использование нескольких проектов UWP в одном решении (по крайней мере, сообщения об ошибках, когда я строил один из проектов, появлялись на всех них), поэтому я должен был скрывать другие, когда строил нацеленный.

(И все еще должно быть xmlns:local="using:MyNamespace", а не clr-namespace (в противном случае появляется другая ошибка)).

0 голосов
/ 10 июня 2018

На самом деле это просто ошибка в вашем синтаксисе XAML, а не проблема наследования.

Вам нужно использовать "clr-namespace" вместо "using" в объявлении пространства имен xaml.clr-namespace сообщает синтаксическому анализатору, что ниже следует фактическое имя пространства имен.Если он не распознает префикс (а «using» не является распознанным префиксом), синтаксический анализатор принимает значение вашего атрибута xmlns: local ссылается на отображение пространства имен, называемое «using: MyNamespace», которое, очевидно, не существует.

Итак, объявите пространство имен в вашем XAML следующим образом:

xmlns:local="clr-namespace:MyNamespace"

, и вам будет хорошо.

...