首页 > 解决方案 > 在运行时使用本机依赖项(和其他文件/文件夹)加载程序集

问题描述

我想在运行时加载程序集 A。这个程序集 A存在于应用程序的子文件夹中,并且对一些其他本机程序集、一些 jar 文件和 jre 文件夹具有运行时依赖项(所以我们正在谈论一些 java 包装器)。所有这些依赖项都存在于与Assembly A相同的文件夹中。
该图将是这样的:
在此处输入图像描述

问题是:
由于应用程序(消费者)构建文件夹中不存在Assembly A运行时依赖项,因此出现异常并且无法使用它。

这是在运行时加载程序集的源代码示例以及该程序集拥有的类型实例的使用。当我调用_ = instance.GetSomething(). 例外是:

System.TypeInitializationException:“'AssemblyA_Dependency.Type' 的类型初始化程序引发了异常。”

        var assembly = Assembly.LoadFrom(@"Releases\VersionA\AssemblyA.dll");

        var sdkProxyType = assembly
            .GetExportedTypes()
            .Where(type => typeof(ISdkProxy).IsAssignableFrom(type))
            .First();

        var instance = (ISdkProxy)Activator.CreateInstance(sdkProxyType);

        _ = instance.GetSomething();

PS:请记住,如果我将所有Assembly A依赖项复制到使用者构建文件夹中,它将正常工作。

有没有办法克服这个问题?

标签: c#runtimeunmanagedassembly-loading

解决方案


推荐阅读