在没有引用的情况下从xap加载Prism中的模块



我使用Prism 4与Unity。我有一个主要项目,和一个模块。该模块是作为Silverlight Applications创建的,因此它构建一个单独的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,并设置Ref = "MyModule ",我可以完全删除引用。. xap"在ModuleInfo上。这工作得很好,但这里有一个问题:我经常构建并使用动态版本号。因此,AssemblyQualifiedName很容易更改。没有引用,就无法动态地获取它。如果我从AssemblyQualifiedName中删除版本号,它将不起作用。

当然有一些其他的方法来获得模块从自己的xap文件加载,而不结束它也在主xap?

无所谓…

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

我被锁在棱镜上了。我没有弄清楚,直到我想到装配位置一般。为我解决这个问题的帖子实际上是关于解决sharepoint部件的。这说明有时候你得跳出思维定势。

看起来你不能在文件版本中使用通配符…嗯…………我找到了一个可以通过http://autobuildversion.codeplex.com/

工作的插件。谁有更好的主意?

最新更新