Silverlight XAP文件未更新

时间:2011-06-19 21:30:10

标签: c# .net silverlight-4.0 prism

我们运行商业Silverlight应用程序。当我们在IIS中升级我们的网站时,我们的一些用户需要清除他们的浏览器历史记录才能获得最新的更新。

这很愚蠢,你可以想象。

如果他们没有清除他们的浏览器历史记录,那么有些用户会这样做,

User Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; SLCC1; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.5.21022; .NET CLR 3.5.30729; .NET CLR 3.0.30729; OfficeLiveConnector.1.5; OfficeLivePatch.1.3; .NET4.0C; .NET4.0E; BRI/2)

Timestamp: Thu, 16 Jun 2011 02:41:49 UTC

Message: Unhandled Error in Silverlight Application Unable to retrieve the module type Car.CarList.InitModule, Car.CarList, Version=1.0.123.17153 from the loaded assemblies.  You may need to specify a more fully-qualified type name.   at Microsoft.Practices.Composite.Modularity.ModuleInitializer.HandleModuleInitializationError(ModuleInfo moduleInfo, String assemblyName, Exception exception)

更新:我开始明白这个问题了。看看小提琴输出,

/ClientBin/Main.xap?ignore-20/06/2011%209:30:19%20a.m.
/ClientBin/CarList.xap

Silverlight应用程序XAP文件的最后写入文件已添加到Main.xap文件中,如此处所述,

http://codeblog.larsholm.net/2010/02/avoid-incorrect-caching-of-silverlight-xap-file/

但上述错误与Car.CarList模块有关,该模块位于不同的XAP文件中。

问题是PRISM导致第二个'模块'被加载CarList.xap,所以我不知道如何添加所需的查询字符串。

1 个答案:

答案 0 :(得分:2)

好的,这肯定解决了它。

我的模块目录加载看起来像这样,

protected override IModuleCatalog GetModuleCatalog()
{
    var CarListModule = new ModuleInfo()
    {
        ModuleName = "CarList",
        ModuleType = "Car.CarList.InitModule, Car.CarList, Version=1.0.0.0",
        Ref = "CarList.xap",
        InitializationMode = InitializationMode.OnDemand,
    };
    // blah
}

我把它改成了这个,

protected override IModuleCatalog GetModuleCatalog()
{
    var CarListModule = new ModuleInfo()
    {
        ModuleName = "CarList",
        ModuleType = "Car.CarList.InitModule, Car.CarList, Version=1.0.0.0",
        Ref = "CarList.xap?Version=1.0.0.0",
        InitializationMode = InitializationMode.OnDemand,
    };
    // blah
}

每个版本的查询字符串都不同,因此强制它加载XAP文件而不使用缓存版本。

我们的构建服务器找到上面的文本Version = 1.0.0.0并替换真实版本号。这包括ModuleType文本中的版本号。要与构建服务器相对应,还要在实际模块中设置要匹配的版本号。