从UWP应用程序中调用.NET标准库中的Process.GetProcesses()

时间:2018-05-03 18:03:27

标签: c# uwp .net-core .net-standard-2.0

我有一个.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 process方法时,它会发出错误并抛出错误 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 :(得分:0)

表单official document,当您定位应用或库中的框架时,您需要指定一组您希望可用的API应用程序或库。您可以使用Target 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中不支持。总之,apis必须可用于平台。