0

新しい MSI を使用してソリューションをバージョン 1 から 2 にアップグレードしているときに、アプリケーションを構成するカスタム アクションの 1 つがバージョン 1 に属する値を使用していることに気付きました (OnCommit アクションで)。

アセンブリ バージョンを出力するメッセージ ボックスとログを追加し、アップグレード中に Windows インストーラーが以前の MSI の dll を使用していることを確認しました。ただし、新しい MSI を手動でインストールすると、正しいカスタム アクションが使用されます。

これを回避する方法はありますか?以前のカスタム アクションを使用する理由について多くの情報が見つかりませんか?

UpgradeCodesは同じですが、RemovePreviousVersions = trueProductCodes異なります。

4

1 に答える 1

0

これは古いバグだと思います:

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

それに関する別のサポート記事がありますが、見つかりません。古いバージョンのセットアップ プロジェクトに適用されるため、削除された可能性があります。迂回とは、アセンブリの名前を変更したり、アセンブリのバージョンを変更したりすることだと思います。

問題 (ご想像のとおり) は、アンインストールがアンインストールを実行するためにアセンブリをロードし、ロード ルールがこの状況 (リフレクション ロード) で決定する限り、アップグレード インストールからのアセンブリが同一であるため、アセンブリがロードされないことです。新しいアセンブリですが、既に読み込まれている古いアセンブリを使用します。これはすべて、最初に古い製品をアンインストールしてから新しい製品をインストールする、非常に古いバージョンの Visual Studio セットアップ プロジェクトを使用していることを意味します。これは、Visual Studio 2008 以降 (およびそれを含む) の既定の動作ではないため、新しいバージョンで問題が発生することはないと思います。

于 2016-09-08T17:32:05.467 に答える