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 中出现。
我正在使用 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 中出现。