WiX Toolset – Jak zmienić nazwę pliku wyjściowego, aby zawierał informacje o wersji

Powiedzmy, że mamy projekt który tworzy nam instalator. Fajnie.

Projekt tworzy nam plik uruchomieniowy o nazwie MyInstaller.exe. Dobrze.

Wysyłamy taki plik naszej koleżance z pracy. Super.

Piszemy nowe funkcje i naprawiamy istniejące błędy. Extra.

Tworzymy instalator zawierający nową wersję programu. Bosko.

Musimy ręcznie zmienić nazwę z MyInstaller.exe na coś w stylu MyInstaller.1.1.exe. Smutek.

Nie róbimy rzeczy, które może za nas komputer zrobić.

Jak to naprawić smutek?

Po pierwsze zakładam, że tworzone przez ciebie assembly posiada poprawnie ustawioną wersję poprzez

[assembly: AssemblyVersion(VersionInfo.VersionString)]
[assembly: AssemblyFileVersion(VersionInfo.VersionString)]

U mnie wartości wersji pochodzą z jednej klasy definiującą stałą wartość używaną przez wszystkie projekty w solucji.

public class VersionInfo
{
      public const string VersionString = "1.1.0.0";
}

Dzięki temu, mamy łatwe źródło informacji o wersji jaką będziemy instalować.

Do projektu instalatora .wixproj dodajmy takie polecenia.

Po zbudowaniu instalatora – Target Name="AfterBuild"

  1. GetAssemblyIdentity pobiera numer wersji z .exe
  • Numerek wersji trafia do zmiennej `%(AssemblyVersion.Version)
  1. Następnie oryginalny plik wynikowy .\bin\$(Configuration)\$(OutputName).exe zostaje skopiowany z nazwą zawierającą informacje o wersji w nazwie
  2. Ostatnim krokiem jest usunięcie oryginalnego pliku wynikowego, bo jego kopia jest pod inną nazwą.