从xap加载Prism模块,无需参考

时间:2011-04-21 23:30:42

标签: silverlight unity-container prism

我正在使用Prism 4和Unity。我有一个主项目和一个模块。该模块创建为Silverlight应用程序,因此它构建了一个单独的xap文件。

我在Bootstrapper的ConfigureModuleCatalog中加载模块,就像文档说明一样。

var moduleType = typeof (MyModule);
this.ModuleCatalog.AddModule(
    new ModuleInfo
    {
       ModuleName = moduleType.Name,
       ModuleType = moduleType.AssemblyQualifiedName,
       InitializationMode = InitializationMode.WhenAvailable,
    });

一切正常,但我注意到我的主xap文件还包含与我的模块关联的dll。因此,我在模块引用上设置了Copy Local = False,并且只在模块dll中使用它们自己的xap文件正确构建。

但现在我的应用程序无法运行,因为我无法获取MyModule的类型信息。我得到一个FileNotFoundException。

我发现如果手动输入ModuleName和ModuleType,我可以完全删除引用,并在ModuleInfo上设置Ref =“MyModule.xap”。这很好,但问题在于:我经常构建并使用动态版本号。所以AssemblyQualifiedName太容易改变了。如果没有引用,就无法动态获取它。如果我从AssemblyQualifiedName中删除版本号,则它不起作用。

当然还有其他一些方法可以让模块从自己的xap文件加载而不会在主xap中结束吗?

1 个答案:

答案 0 :(得分:0)

<强>没关系...

经过进一步的研究,似乎我的错误是在汇编版本中使用通配符版本控制。许多站点建议仅在程序集FILE版本中使用通配符,并在程序集版本上使用固定版本号。然后我可以删除引用并以固定版本号的强名称引用该模块。

我被这个人锁定在棱镜上。在我考虑装配位置之前,我没弄明白。为我解决这个问题的帖子是关于解决sharepoint部分的问题。只是去展示有时你必须在盒子外思考。

<强>更新

看起来你不能在文件版本中使用通配符... grr ...我找到了一个可以正常工作的加载项http://autobuildversion.codeplex.com/

任何人都有更好的主意吗?