C# 从UWP应用程序在.NET标准库中调用Process.GetProcesses()
我有一个.NET标准库,如下所示:C# 从UWP应用程序在.NET标准库中调用Process.GetProcesses(),c#,uwp,.net-core,.net-standard-2.0,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] publi
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)类型)。GenericParameterAttributes'引发了类型为“System.InvalidOperationException”的异常
有什么办法可以让它工作吗
更新
删除了所有Template10的内容,因为它倾向于掩盖真正的错误,并尝试了一个空白的UWP应用程序。获取此异常
System.PlatformNotSupportedException
HResult=0x80131539
Message=Retrieving information about local processes is not supported on this platform.
如果你甚至不能使用它,那么把它包括在.net标准(它应该包含一组你可以使用的标准API)中有什么意义呢
我还应该注意到,我的目标是最新的更新(2018年春季)表单,当您以应用程序或库中的框架为目标时,您指定了希望使应用程序或库可用的API集。您可以使用目标框架名字对象(TFM)在项目文件中指定目标框架
指定多个目标框架时,可以有条件地引用每个目标框架的程序集。在代码中,可以通过使用带有if-then-else逻辑的预处理器符号,有条件地对这些程序集进行编译
ProcessHandler
在UWP中不支持。总之,API必须可供平台使用。我认为这是不可能的。这里还有一个链接指向一个类似的问题,该问题的答案是UWP在沙盒环境中运行,无法访问getprocesss()
是的,它在UWP中不可用,但在.net standard 2.0中可用,我可以在UWP应用程序中使用.net标准库.net framework中的绝大多数功能在平板电脑程序中不可用,即使它们出现在框架中,它们运行的“沙箱”环境几乎压倒了所有功能。改用普通的程序。这很有趣。我自己也很好奇。。。我相信这个想法是它可以编译到任何环境,但是你会认为如果你使用“标准”并且它是通用的,那么它会在编译过程中对你大喊大叫。这是以前创建可移植类库的方法。向PCL项目中添加的目标越多,编译的代码就越少。这也没有让任何人高兴。
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
}
}