Ошибка при получении информации о пакете UWP из приложения Winform? - PullRequest
0 голосов
/ 29 января 2019

Используя приложение WinForm, я пытаюсь имитировать этот образец с сайта Microsoft Github, который показывает, как получить информацию о пакете с помощью API упаковки среды выполнения Windows.

Iполучаю следующую ошибку в строке: Package package = Package.Current; из приведенного ниже кода при попытке получить информацию о пакете UWP из приложения WinForm :

Типили имя пространства имен «Пакет» не может быть найдено (вам не хватает директивы using или ссылки на сборку?)

Вопрос : Хотя ошибка является известным C #Ошибка, которая имеет много онлайн-сообщений / решений, но здесь контекст отличается.Компилятор, кажется, жалуется, что мне не хватает необходимой сборки для Класс пакета .Но у меня есть using Windows.ApplicationModel; using оператор в моем коде ниже.Так что может быть возможной причиной ошибки;то есть то, что мне здесь не хватает?

ПРИМЕЧАНИЕ : чтобы обеспечить включение необходимых сборок, я установил этот UWPDesktop пакет NuGet в WinForm Project на VS2017-ver 15.9.5 on Windows 10 Pro - Ver 8109:

Приложение WinForm : соответствующий код throws error в строке: Package package = Package.Current;

using System;
using System.Windows.Forms;
using Windows.ApplicationModel; //I added from here
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Navigation;
using Windows.ApplicationModel.Background;
using Windows.Foundation.Collections;
using Windows.Storage;
using Windows.Storage.Search;
using Windows.UI.Xaml;
using Windows.Management.Deployment;

namespace WinForms_to_UWP
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Package package = Package.Current;
            PackageId packageId = package.Id;

            Console.WriteLine(packageId.FullName);
        }
    }
}

Из примера UWP GitHubпроект : соответствующий код из script1_identity.xaml.cs , который отлично работает:

using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Navigation;
using SDKTemplate;
using System;
using Windows.ApplicationModel;

namespace SDKTemplate
{
void GetPackage_Click(Object sender, RoutedEventArgs e)
{
    Package package = Package.Current;
    PackageId packageId = package.Id;

    String output = String.Format("Name: \"{0}\"\n" + packageId.FullName);

    OutputTextBlock.Text = output;
}

ОБНОВЛЕНИЕ :

Также стоит отметитьчто при добавлении операторов Using Windows..... вверху VS intellisense распознает только операторы Window.Foundation и Window.UI..Для других операторов Using Windows..... мне пришлось жестко кодировать - например, Windows.ApplicationModel;.Однако VS2017 не жаловался, когда я жестко их кодировал.Кроме того, все операторы Using, начинающиеся с Windows., отображаются серым цветом, как показано на рисунке ниже.Не уверен, что это как-то связано с ошибкой:

enter image description here

1 Ответ

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

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

Но проблему легко решить.Просто добавьте ссылку на файл windows.winmd версии SDK, на которую вы нацелены.Смотрите этот скриншот:

enter image description here

...