我一直收到以下错误,但无法弄明白。我想知道是否有人可以提供协助。
错误: 无法加载模块MyExternalAssembly.MyNamespace.MyModule的类型。
如果在Silverlight应用程序中使用MEF时发生此错误,请确保在主应用程序/ shell中对MefExtensions程序集的引用的CopyLocal属性设置为true,而在所有其他程序集中设置为false。
错误是:无法从加载的程序集中检索模块类型MyExternalAssembly.MyNamespace.MyModule,MyExternalAssembly.MyNamespace,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null。您可能需要指定更完全限定的类型名称..
代码:
加载屏幕(加载模块,存储各种用途的装配参考)
string[] dynamicLibraries = Directory.GetFiles(pluginDirectory, "*.dll", SearchOption.AllDirectories);
// Parse through the DLL's and look for types that implement "IModule".
foreach (string file in dynamicLibraries)
{
// Get the plugin assembly information.
Assembly plugin = Assembly.LoadFile(file);
// Get all types that are exported for plugins.
IEnumerable<Type> modules = plugin.GetTypes()
.Where(t => typeof(IModule).IsAssignableFrom(t));
if (modules.Count() > 0)
{
ApplicationState.Instance.Plugins.Add(plugin, modules);
}
}
这是ConfigureModuleCatelog方法
protected override void ConfigureModuleCatalog()
{
base.ConfigureModuleCatalog();
ModuleCatalog catalog = (ModuleCatalog)this.ModuleCatalog;
foreach (var assembly in ApplicationState.Instance.Plugins)
{
foreach (var type in assembly.Value)
{
this.ModuleCatalog.AddModule(new ModuleInfo
{
ModuleName = type.FullName,
ModuleType = type.AssemblyQualifiedName,
Ref = new Uri(assembly.Key.Location, UriKind.RelativeOrAbsolute).AbsoluteUri,
InitializationMode = InitializationMode.WhenAvailable
});
}
}
}
基本上,我需要一种方法来维护/使用这个“插件”字典并正确地将模块化发送到wprk。和想法?
谢谢!
答案 0 :(得分:1)
我很困惑。你说Unity然后你的代码使用MEF类型。如果你正在使用MEF,为什么在地球上你手动找到IModule
实现 - 你应该使用MEF为你做动态分辨。