0

При обновлении моего решения с версии 1 до 2 с использованием новой MSI я заметил, что один из моих пользовательских действий, которые настраивают приложение, использует значения, относящиеся к версии 1 (в действии OnCommit)Обновление использует OnCommit Custom Action от предыдущего установщика

Я добавил сообщения и журналы, которые распечатывают версию сборки и подтвердили, что во время обновления установщик Windows использует dll из предыдущего MSI. Однако, если я вручную устанавливаю новый MSI, то используется правильное пользовательское действие.

Есть ли способ обойти это? Не нашли много информации о том, почему он использует предыдущие пользовательские действия?

Я установил RemovePreviousVersions = true и UpgradeCodes равны в то время как ProductCodes различны.

ответ

0

Я считаю, что это старая ошибка:

https://support.microsoft.com/en-us/kb/555184

и есть другая поддержка статьи о ней, что я не могу найти. Возможно, он был удален, поскольку он применяется к более старым версиям проектов установки. Я думаю, что обходные пути - это такие вещи, как переименование сборки и изменение ее монтажной версии.

Проблема (как вы могли догадаться) заключается в том, что удаление загружает сборку для удаления, а сборка из установки обновления идентична, поскольку правила нагрузки определяют в этой ситуации (отражение нагрузки), поэтому не загружает новую сборку, а использует уже загруженную. Все это означает, что вы используете очень старую версию проектов установки Visual Studio, которые сначала удаляют старый продукт, а затем устанавливают новый. Это не было поведением по умолчанию, поскольку (и в том числе) Visual Studio 2008, поэтому я не думаю, что вы получите проблему с более новой версией.