Silverlight XAP文件不更新

4
我们运行商业银光应用程序。当我们在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)

更新:我开始理解这个问题了。看一下Fiddler的输出,

/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,因此我不确定如何添加所需的查询字符串。

我认为这是使用FireFox的问题。这个问题https://dev59.com/MXVC5IYBdhLWcg3wZwNT可能会对你有所帮助。 - Jehof
我已经更新了我的帖子。问题与一个解决方法有关,该解决方法已应用于我们的主XAP文件,但尚未应用于我们的其他XAP文件(我们使用PRISM来模块化我们的XAP文件)。 - peter
当您使用IE时,是否也出现了这个问题? - Jehof
实际上,我猜有95%以上的用户在使用IE,所以我必须说是IE。 - peter
这个解决方案对我来说一直很稳定。 - Veverke
1个回答

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文本中的版本号。为了对应,构建服务器还设置实际模块中的版本号以匹配。


还需要等待24小时才能接受答案,到时候我会接受的。 - peter
@Peter - 我的理解是,在查询字符串中的ModuleType版本号和程序集中的版本号必须完全匹配,我说得对吗? - ChrisF
模块类型的版本号必须与实际程序集的版本号匹配。查询字符串的版本号不一定要匹配,因为它不会直接使用。但是所有版本号必须同时更改。我将它们保持一致,因为这更有意义。 - peter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接