UWP 和 net native 抛出 FileNotFoundException
UWP and net native throws a FileNotFoundException
我正在开发一个在调试模式下完美运行的 UWP,当我在发布模式下编译它时它编译没有错误,但是当我 运行 应用程序时,我有一个使用函数的进程在抛出 System.IO.FileNotFoundException System.Security 的 .Net Standard 2.0 库中。找不到此程序集的元数据。
这是我的rd.xml
<Directives xmlns="http://schemas.microsoft.com/netfx/2013/01/metadata">
<Application>
<!--
An Assembly element with Name="*Application*" applies to all assemblies in
the application package. The asterisks are not wildcards.
-->
<Assembly Name="*Application*" Dynamic="Required All" />
<!-- Add your application specific runtime directives here. -->
<Assembly Name="System.Runtime" Dynamic="Required All" />
<Assembly Name="System.Security" Dynamic="Required All" />
<Type Name="Windows.Foundation.TypedEventHandler{Microsoft.UI.Xaml.Controls.NavigationView,Microsoft.UI.Xaml.Controls.NavigationViewItemInvokedEventArgs}" MarshalObject="Public" />
<Type Name="Microsoft.UI.Xaml.Controls.NavigationView">
<Event Name="ItemInvoked" Dynamic="Required"/>
</Type>
<Type Name="System.Configuration.AppSettingsSection" Serialize="Required Public" />
</Application>
</Directives>
而抛出错误的行就是这一行。
Assembly System_Security_Assembly = Assembly.Load("System.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a");
尽管这个工作正常。
Assembly cripXmlAssembly = Assembly.Load("System.Security.Cryptography.Xml");
我读过有关向 RD.xml 文件添加指令的信息,但我认为这适用于 UWP,在这种情况下,异常是由 Net Standard dll 抛出的。有人可以解释一下吗?
这是一个复制品。
通过讨论,我们发现 CoreRT 不支持程序集的动态加载(这是使用 .NET 原生工具链在 Release 中编译应用程序时使用的运行时):
我们知道,在发布模式下构建时,.NET 本机用于 UWP 应用程序。
从这个document:
.NET Native uses CoreRT in conjunction with the UTC compiler to
provide native compilation for UWP apps.
从这个 thread :
Unsupported features: Dynamic loading (e.g. Assembly.LoadFile),
dynamic code generation (e.g. System.Reflection.Emit),
Windows-specific interop (e.g. COM, WinRT)
Here 还提到目前这在 CoreRT 中是不可能的。
事实上,唯一可以 "loaded" 的程序集是那些静态链接到 运行 本机进程的程序集。
我正在开发一个在调试模式下完美运行的 UWP,当我在发布模式下编译它时它编译没有错误,但是当我 运行 应用程序时,我有一个使用函数的进程在抛出 System.IO.FileNotFoundException System.Security 的 .Net Standard 2.0 库中。找不到此程序集的元数据。
这是我的rd.xml
<Directives xmlns="http://schemas.microsoft.com/netfx/2013/01/metadata">
<Application>
<!--
An Assembly element with Name="*Application*" applies to all assemblies in
the application package. The asterisks are not wildcards.
-->
<Assembly Name="*Application*" Dynamic="Required All" />
<!-- Add your application specific runtime directives here. -->
<Assembly Name="System.Runtime" Dynamic="Required All" />
<Assembly Name="System.Security" Dynamic="Required All" />
<Type Name="Windows.Foundation.TypedEventHandler{Microsoft.UI.Xaml.Controls.NavigationView,Microsoft.UI.Xaml.Controls.NavigationViewItemInvokedEventArgs}" MarshalObject="Public" />
<Type Name="Microsoft.UI.Xaml.Controls.NavigationView">
<Event Name="ItemInvoked" Dynamic="Required"/>
</Type>
<Type Name="System.Configuration.AppSettingsSection" Serialize="Required Public" />
</Application>
</Directives>
而抛出错误的行就是这一行。
Assembly System_Security_Assembly = Assembly.Load("System.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a");
尽管这个工作正常。
Assembly cripXmlAssembly = Assembly.Load("System.Security.Cryptography.Xml");
我读过有关向 RD.xml 文件添加指令的信息,但我认为这适用于 UWP,在这种情况下,异常是由 Net Standard dll 抛出的。有人可以解释一下吗?
这是一个复制品。
通过讨论,我们发现 CoreRT 不支持程序集的动态加载(这是使用 .NET 原生工具链在 Release 中编译应用程序时使用的运行时):
我们知道,在发布模式下构建时,.NET 本机用于 UWP 应用程序。
从这个document:
.NET Native uses CoreRT in conjunction with the UTC compiler to provide native compilation for UWP apps.
从这个 thread :
Unsupported features: Dynamic loading (e.g. Assembly.LoadFile), dynamic code generation (e.g. System.Reflection.Emit), Windows-specific interop (e.g. COM, WinRT)
Here 还提到目前这在 CoreRT 中是不可能的。
事实上,唯一可以 "loaded" 的程序集是那些静态链接到 运行 本机进程的程序集。