XAP-файлы Silverlight не обновляются - PullRequest
4 голосов
/ 20 июня 2011

Запускаем коммерческое приложение 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

Дата последней записи XAP-файла приложения Silverlight была добавлена ​​в файл Main.xap, как описано здесь,

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

НО ошибка выше относится к модулю Car.CarList, который находится в другом файле XAP.

Проблема в том, что PRISM приводит к загрузке второго «модуля» CarList.xap, поэтому я не уверен, как добавить требуемую строку запроса.

1 Ответ

2 голосов
/ 20 июня 2011

ОК, это определенно решило.

Загрузка каталога моего модуля выглядела так,

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. Для соответствия серверу сборки также задается номер версии в соответствующих модулях.

...