我有一个班级:
public abstract class XTimeViewModel : DevExpress.Xpf.Mvvm.ViewModelBase
{
public bool PropertiesChanged { get; set; }
[NotifyPropertyChangedInvocator]
protected virtual void _onPropertyChanged(/*[CallerMemberName]*/ string propertyName = null)
{
PropertiesChanged = true;
RaisePropertyChanged(propertyName);
}
}
它包含在名为Common
的程序集中。当我尝试为包含DirectoryCatalog
的文件夹和其他程序集以及Common
等依赖项添加DevExpress.Xpf.Mvvm.v13.2
时:
var catalog = new DirectoryCatalog(unitPath, "*.dll");
AggregateCatalog.Catalogs.Add(catalog);
我得到ReflectionTypeLoadException
,TypeLoadException
说明:
"无法加载类型' Startup.ViewModels.ViewModel'从装配 ' G4S.XTime.Common,Version = 1.0.0.0,Culture = neutral, 公钥=空'"
我无法理解为什么MEF无法加载此类型。当我尝试示例代码时:
var asm = Assembly.LoadFrom(@"C:\Development\XTime\Startup\Units\G4S.XTime.Common.dll");
var vm = asm.GetType("G4S.XTime.Common.XTimeViewModel");
然后vm
包含正确的类型,即G4S.XTime.Common.XTimeViewModel
。
只是预感,但我的所有已加载的模块都没有调用Initialize
,我认为这个错误接近其根本原因。
如果我引用模块,并使用AssemblyCatalog
加载它们,那么根本没有问题,所有工作都应该如此。什么可以将程序集移出以在运行时加载更改以阻止工作?
BTW,Common
不是模块本身,而只是几个模块的依赖。