StructureMap 无法从插件框架中的文件加载程序集

StructureMap could not load assembly from file in a plugin framework

我正在使用 StructureMap 在我的应用程序启动时加载插件。在应用程序启动时,当我创建容器时,我会进行简单的扫描,例如:

internal static IContainer Init()
{
    var container = new Container(a =>
    {
        a.Scan(scan =>
        {
            scan.TheCallingAssembly();
            scan.WithDefaultConventions();
            scan.AssembliesFromPath($"{AppDomain.CurrentDomain.BaseDirectory}Plugins");
        });
    });

    ConfigureDebugSubstitutions(container);

    return container;
}

但我在控制台中看到这些错误:

StructureMap could not load assembly from file <filepath>

我目前通过手动将文件加载到 AppDomain 来绕过它:

private static void LoadPluginAssemblies()
{
    var pluginAssemblies = Directory.GetFiles($"{AppDomain.CurrentDomain.BaseDirectory}plugins", "*.dll");
    pluginAssemblies.Each(a =>
    {
        Assembly.LoadFile(a);
    });
}

但我很好奇为什么我一开始就从 structuremap 收到这条消息。我 looked at the code,看起来任何错误都得到了简单的处理。有什么想法吗?我使用的是 4.0.1.318 版,直到我从 3.1.4.143 版升级 StructureMap 后才注意到这一点。另外,如果重要的话,我正在使用 .Net v4.6.1。

看起来它可能是一个错误。

所以,是的,我知道为什么。它尝试直接从 AppDomain 按名称加载程序集,这确实比按文件路径加载更高效且更不容易出错。很好,但它应该尝试回退到按您的情况加载文件。我现在正在解决这个问题,它将在 4.1 中出现。

https://github.com/structuremap/structuremap/issues/451