代码之家  ›  专栏  ›  技术社区  ›  Daniele Sartori

动态加载dll时,找不到由URI'/mydll;component/subfolder/mainwindow.xaml'标识的资源

  •  0
  • Daniele Sartori  · 技术社区  · 5 年前

    我的项目有问题。在我创建的库中,我有一个子文件夹,其中包含一些视图和视图模型,但是由于它们在类库中,所以我没有app.xaml。这一直是没有问题的。

    最近我被派去用公司买的工具加密那个dll。这个工具的作用,基本上是解密和加载程序集。现在我的问题是,当我以数据方式加载之前提到的类库时,当必须启动一个窗口时,我会得到以下异常

    找不到由URI'/mydll;component/subfolder/mainwindow.xaml'标识的资源

    我读到,当您以这种方式加载程序集时,WPF有一些问题,解决方法是在App.xaml中添加一个虚拟全局资源,如下所示:

    <Application x:Class="TestWpfApp.App" 
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        StartupUri="MainWindow.xaml"> 
        <Application.Resources> 
            <SolidColorBrush x:Key="Dummy" Color="Yellow"></SolidColorBrush> 
        </Application.Resources> 
    </Application>
    

    但我没有App.xaml。我有办法解决这个问题吗?

    当前我的设置如下:

    我有一个项目有一个类AssemblyLoader。此类处理以下事件:

    AppDomain currentDomain = AppDomain.CurrentDomain;
    currentDomain.AssemblyResolve += new ResolveEventHandler(currentDomain_AssemblyResolve);
    

    因此,每当框架需要从被引用的dll中获取某些内容时,都会调用currentDomain_AssemblyResolve。如果所需的程序集已加密,则使用dll对其进行解密并返回程序集。我确信程序集已加载,因为我可以点击“业务”部分。当他在窗口中调用InitializeComponent()时引发异常

    0 回复  |  直到 5 年前