2011-06-19 56 views
4

我們運行一個商業silverlight應用程序。當我們在IIS中升級我們的網站時,我們的一些用戶需要清除瀏覽器歷史記錄以獲取最新更新。Silverlight XAP文件不更新

這很愚蠢,你可以想象。

如果不清除瀏覽器的歷史的一些用戶得到這個,

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文件的最後寫FILEDATE已被添加到文件Main.xap喜歡這裏解釋,

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

但上述錯誤涉及在不同的XAP文件中的Car.CarList模塊。

問題是,PRISM導致第二個'模塊'加載CarList.xap,所以我不知道如何添加所需的查詢字符串。

+0

我認爲這是由於使用FireFox的問題。問題http://stackoverflow.com/questions/307709/how-do-you-force-firefox-to-not-cache-or-re-download-a-silverlight-xap-file可能會爲您提供一些幫助。 – Jehof

+0

我已經更新了我的帖子。這個問題與已經應用到我們的主要XAP文件中的解決方法有關,但尚未應用於我們的其他XAP文件(我們使用PRISM來模塊化我們的XAP文件)。 – peter

+0

當你使用IE時,這個問題是否也會發生? – Jehof

回答

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文本中的版本號。爲了與構建服務器相對應,還要在實際模塊中設置版本號以匹配。

+0

必須再等24小時才能接受答案。那麼會做。 – peter

+0

@Peter - 我是否認爲查詢字符串和程序集中'ModuleType'的版本號都必須匹配? – ChrisF

+0

ModuleType版本號必須與實際裝配的版本號相匹配。查詢字符串版本號不一定必須匹配,因爲它不直接被使用。但所有的版本號都必須同時更改。我保持它們都一樣,因爲它更有意義。 – peter