【问题标题】:Silverlight XAP Files Not UpdatingSilverlight XAP 文件未更新
【发布时间】:2011-09-18 07:30:25
【问题描述】:

我们运行一个商业 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/

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

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

【问题讨论】:

  • 我认为这是由于使用 FireFox 造成的问题。问题stackoverflow.com/questions/307709/…可能会给你一些帮助。
  • 我已经更新了我上面的帖子。该问题与已应用于我们的主 XAP 文件但尚未应用于我们的其他 XAP 文件的解决方法有关(我们使用 PRISM 模块化我们的 XAP 文件)。
  • 你使用IE时是否也会出现这个问题?
  • 其实我猜我们 95% 以上的用户都在使用 IE,所以我不得不说是 IE。
  • This solution 一直为我工作

标签: c# .net silverlight-4.0 prism


【解决方案1】:

好的,这肯定解决了。

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

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 - 我是否正确假设查询字符串和程序集中 ModuleType 中的版本号都必须匹配?
  • ModuleType 版本号必须与实际程序集的版本号相匹配。查询字符串版本号不一定要匹配,因为它不直接被使用。但是所有版本号都必须同时更改。我将它们保持不变,因为这样更有意义。
猜你喜欢
  • 1970-01-01
  • 2011-08-09
  • 2012-04-04
  • 2011-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-25
  • 2010-12-15
相关资源
最近更新 更多