DLL作为EmbeddedResource不适用于AssemblyResolve

时间:2019-07-26 05:57:14

标签: c# wpf prism assemblyresolve

我的项目是WPF应用程序,它在初始化时借助Prism.Unity模块化动态加载模块(我自己的* .dll库)。我正在从包含dll的文件夹中使用DirectoryModuleCatalog解决模块。我也有第三方库,只需要加载我的某些模块即可。因此,当我加载需要第三个部分库的模块时-这些库也正在加载。

我想要实现的目标:我想将那些第三方库嵌入到相关模块中,以便在我不需要真正的第三方库时不会暴露它们。

我一直在寻找关于stackoverflow和codeproject的答案。基本上有两种主要解决方案:

1-https://blogs.msdn.microsoft.com/microsoft_press/2010/02/03/jeffrey-richter-excerpt-2-from-clr-via-c-third-edition/

2-ILMerge(对我不起作用)

这是1个解决方案。

我按照Jeffrey Richter的建议,将AppDomain.CurrentDomain.AssemblyResolve处理程序添加到我的App.OnStartup()处理程序中。它可以为我的主要项目WPF正确启动。当它缺少dll时-处理程序起作用。但是,当我的模块缺少第三方dll时,我正在处理FileNotFoundException。而且这里的主要问题是我的模块(手写的dll库)和WPF应用程序(可执行)都不知道彼此,直到Prism在运行时与他们成为朋友。我不能将AssemblyResolve添加到模块库中,因为它根本无法启动。我想将Prism注入到我的可执行文件中之前检查它是否具有所有需要的依赖项。但是我可能错了。

我也尝试过这个: https://www.codeproject.com/Articles/528178/Load-DLL-From-Embedded-Resource 和其他一些基本相同的解决方案。

// Here's where I subscribe to the event
public partial class App : Application
{
    protected override void OnStartup(StartupEventArgs e)
    {
        AppDomain.CurrentDomain.AssemblyResolve += (sender, args) =>
       {
            // Hits only within WPF code. But not from external libs...
       }
    }
}

// Here's how my module (dll with ref to the third party lib) is being defined
[Module(ModuleName = ModuleNames.SomeModuleName)]
public class SomeModule: IModule
{
     public void Initialize()
     {
          // Doesn't invoke when has third party libraries as embedded 
          // resources
     }
}

0 个答案:

没有答案