C# UWP Reflection Assembly.Load()未在.Net本机工具链的发布模式下工作

C# UWP Reflection Assembly.Load()未在.Net本机工具链的发布模式下工作,c#,reflection,uwp,system.reflection,.net-native,C#,Reflection,Uwp,System.reflection,.net Native,我正在尝试一个PoC在运行时在UWP应用程序中动态加载程序集(UWP类库的DLL) 由于当前UWP中的限制,如果我将程序集移动到AppX文件夹,则可以加载程序集。在debug模式下部署后,使用Assembly.Load()方法可以很好地工作 但是,当我尝试在启用了.Net Native tool chain选项的情况下以发布模式编译和运行应用程序时,它会引发运行时异常,而不会加载程序集 例外情况 System.IO.FileNotFoundException: Cannot load assem

我正在尝试一个PoC在运行时在UWP应用程序中动态加载程序集(UWP类库的DLL)

由于当前UWP中的限制,如果我将程序集移动到AppX文件夹,则可以加载程序集。在debug模式下部署后,使用Assembly.Load()方法可以很好地工作

但是,当我尝试在启用了.Net Native tool chain选项的情况下以发布模式编译和运行应用程序时,它会引发运行时异常,而不会加载程序集

例外情况

System.IO.FileNotFoundException: Cannot load assembly 'MyUIClassLibrary.UWP'. No metadata found for ths assembly.
System.Reflection.Runtime.Assemblies.RuntimeAssembly.GetRuntimeAssembly(RuntimeAssembly
+ 0x22
 at Assembly
System.Reflection.Runtime.General.ReflectionCoreCallbacksImplementation.Load(AssemblyName, Boolean) + 0x2eb827
 at System.Reflection.Assembly.Load(Reflection.AssemblyName assemblyRef)
代码示例

private UserControl LoadUserControl(string assemblyName)
{
    AssemblyName aName = new AssemblyName
    {
        Name = assemblyName,
        ProcessorArchitecture = ProcessorArchitecture.X86
    };

    var assembly = Assembly.Load(aName);

    Type[] tlist = assembly.GetTypes();

    return Activator.CreateInstance(tlist[0]) as UserControl;
}

...
...

//Loading UI assemblies at runtime
pivotItemOne.Content = LoadUserControl("MyUIClassLibrary.UWP");
我认为这是.Net原生工具链的问题,也是在发布模式构建时避免使用其他DLL的问题。因为它在调试模式下工作良好

如果我添加UWP类库项目作为对主UWP应用程序的引用,那么汇编加载方法在调试和发布配置中都可以正常工作

出于某种原因,我真正的目标是从AppX文件夹加载程序集,而不在项目中引用它们。像在WPF应用程序中一样作为外部程序集加载

请让我知道我是否遗漏了什么?或任何变通方法。提前谢谢


注意:我的机器正在运行Windows 10 Fall Creator Update,并使用VS2017

可能的副本,您将如何将其部署到应用商店?或者你不是通过商店来部署它吗?这有点晚了,但对后代来说。。在UWP中,我认为这种行为是因为你不允许加载那些没有打包和引用到你的应用程序中的程序集,因此也不受信任。不管是好是坏,出于安全目的,这是一种限制。可选的软件包或应用程序扩展是实现您想要的功能的一种可能性。您还可以包括一个脚本引擎,并根据您想做的事情的性质来使用该路径。