0

我正在使用 Silverlight 4 应用程序,我们使用 Prism/MEF 来构建模块。

每个模块都是作为 Silverlight 应用程序创建的。然后,我们使用 ModulesCatalog.xaml 文件来控制模块的加载方式。

我们有 6 个模块,一切都很完美。

本周我们将添加第 7 个模块,我们刚刚创建了新的 Silverlight 应用程序。我们如下设置模块类。

[ModuleExport(typeof(InsightModule))]
public class InsightModule : IModule
{

}

然后我们在 ModulesCatalog 文件中添加了一个条目。

现在,当我们运行应用程序时,我们开始收到所有类型的重组错误。堆栈显示了这一点。

at System.ComponentModel.Composition.CompositionResult.ThrowOnErrors(AtomicComposition atomicComposition)
at System.ComponentModel.Composition.Hosting.ExportProvider.OnExportsChanging(ExportsChangeEventArgs e)
at System.ComponentModel.Composition.Hosting.CatalogExportProvider.OnCatalogChanging(Object sender, ComposablePartCatalogChangeEventArgs e)
at System.ComponentModel.Composition.Hosting.ComposablePartCatalogCollection.OnChanging(Object sender, ComposablePartCatalogChangeEventArgs e)
at System.ComponentModel.Composition.Hosting.AggregateCatalog.OnChanging(ComposablePartCatalogChangeEventArgs e)
at System.ComponentModel.Composition.Hosting.ComposablePartCatalogCollection.RaiseChangingEvent(Lazy`1 addedDefinitions, Lazy`1 removedDefinitions, AtomicComposition atomicComposition)
at System.ComponentModel.Composition.Hosting.ComposablePartCatalogCollection.Add(ComposablePartCatalog item)
at Microsoft.Practices.Prism.MefExtensions.Modularity.MefModuleInitializer.CreateModule(ModuleInfo moduleInfo)
at Microsoft.Practices.Prism.Modularity.ModuleInitializer.Initialize(ModuleInfo moduleInfo)

然后你得到标准输出。

异常消息是:组成保持不变。由于以下错误,更改被拒绝: 合成产生了多个合成错误,有 57 个根本原因。下面提供了根本原因。查看 CompositionException.Errors 属性以获取更多详细信息。

1) 部分 'EyeCue.Common.AboutEyeCueView' 上的不可重组导入 'EyeCue.Common.AboutEyeCueView.ViewModel (ContractName="EyeCue.Common.AboutEyeCueVM")' 阻止了出口的变化。

令人费解的是为什么其他 6 个模块都没有引起这个问题,但现在突然之间,这个没有任何内容的新模块导致目录的重组。这没有道理。

另外,在某些情况下,我有导入的 ctor,这就是我必须做的才能让事情正常工作,所以这不像设置 Allow Recomposition 属性那么简单。

我已经下载了 VisualMFX,但是这行代码会引发 Object Not initialized 异常。

this.compositionInfo = new CompositionInfo(_aggregateCatalog,  _container);

发生这种情况时,两者_aggregateCatalog&_container都不为空。

总之,为什么第 7 个模块会突然开始导致重组?特别是当模块此时甚至没有定义任何导出或导入时?这导致我们如何阻止它来解决这个问题?

4

1 回答 1

0

这个问题原来是对一个将 Copy Local 设置为 true 的程序集的引用。

确保在主应用程序程序集中设置的所有引用都设置为 Copy Local = false 似乎解决了问题。

于 2012-07-25T20:08:26.510 回答