Вызов Process.GetProcesses () внутри стандартной библиотеки .NET из приложения UWP - PullRequest
0 голосов
/ 03 мая 2018

У меня есть стандартная библиотека .NET, которая находится ниже:

using System;
using System.Diagnostics;
using System.Runtime.InteropServices;

namespace process_library
{
    public class ProcessHandler
    {
        public ProcessHandler()
        {

        }

        [MTAThread]
        public Process[] GetProcesses()
        {
            return Process.GetProcesses();
        }
    }
}

Затем у меня есть проект Template10, в котором все ядро ​​.net обновлено до последней версии (требуется для его сборки) и ссылается на мою библиотеку. Пока все это работает.

Внутри моей модели основного вида я создаю экземпляр класса моей библиотеки

ProcessHandler p = new ProcessHandler();

Это также успешно.

Моя проблема в том, что когда я вызываю метод get процесса, он вылетает и выдает ошибку GenericParameterAttributes = '((System.RuntimeType) type) .GenericParameterAttributes' вызвал исключение типа 'System.InvalidOperationException'

Есть ли способ заставить это работать?

UPDATE Удалил все элементы Template10, так как он имеет тенденцию маскировать реальные ошибки, и попробовал пустое приложение UWP. Получить это исключение

System.PlatformNotSupportedException
  HResult=0x80131539
  Message=Retrieving information about local processes is not supported on this platform.

Какой смысл включать его в стандарт .net (который должен содержать стандартный набор apis, который вы можете использовать), если вы даже не можете его использовать

Следует также отметить, что я нацеливаюсь на самое последнее обновление (весна 2018 г.)

1 Ответ

0 голосов
/ 04 мая 2018

Форма официальный документ , когда вы нацеливаете фреймворк в приложении или библиотеке, вы указываете набор API, которые вы хотите сделать доступными для приложения или библиотека. Целевую платформу вы указываете в файле своего проекта, используя Tikm Framework Monikers (* TFM).

Когда вы указываете несколько целевых структур, вы можете условно ссылаться на сборки для каждой целевой структуры. В вашем коде вы можете условно компилировать эти сборки, используя символы препроцессора с логикой if-then-else

public class MyClass
{
    static void Main()
    {
#if NET40
        Console.WriteLine("Target framework: .NET Framework 4.0");
#elif NET45  
        Console.WriteLine("Target framework: .NET Framework 4.5");
#else
        Console.WriteLine("Target framework: .NET Standard 1.4");
#endif
    }
}

ProcessHandler не поддерживается в UWP. Таким образом, API должен быть доступен для платформы.

...