Jak najlepiej używać wersji pliku i wersji złożonej?

W. Net są dostępne dwa numery wersji podczas budowania projektu, Wersja pliku i wersja Assembly. Jak używasz tych liczb? Trzymając je tak samo? Automatyczne zwiększanie jednego, ale ręczne zmienianie drugiego?

A co z atrybutem AssemblyInformationalVersion?

Znalazłem artykuł support Microsoft Knowledge Base (KB), który dostarczył pomocy: Jak używać wersji Assembly i wersji pliku Assembly .

Author: Mrchief, 2008-08-18

8 answers

W scenariuszu, w którym mam wiele zestawów plików (np. 1 exe i 5 bibliotek DLL), użyję innej wersji pliku dla każdego z nich, ale tej samej wersji zestawu dla wszystkich z nich, pozwalając Ci wiedzieć, z którym exe każde z bibliotek DLL.

 14
Author: Adam Haile,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-18 15:20:59

W rozwiązaniach z wieloma projektami, jedną rzeczą, którą uznałem za bardzo pomocną, jest to, aby wszystkie pliki AssemblyInfo wskazywały na jeden projekt, który reguluje wersjonowanie. Więc moje AssemblyInfos mają linię:

[assembly: AssemblyVersion(Foo.StaticVersion.Bar)]

Mam projekt z jednym plikiem, który deklaruje ciąg znaków:

namespace Foo
{
    public static class StaticVersion
    {
         public const string Bar= "3.0.216.0"; // 08/01/2008 17:28:35
    }
}

Mój zautomatyzowany proces budowania po prostu zmienia ten ciąg, wyciągając najnowszą wersję z bazy danych i zwiększając drugi ostatni numer.

Zmieniam tylko główny build numer, gdy zestaw funkcji zmienia się dramatycznie.

W ogóle nie zmieniam wersji pliku.

 74
Author: Jon Dewees,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-18 16:03:33

Artykuł KB wymienia najważniejsze rozróżnienie: wersje plików są używane tylko do celów wyświetlania, podczas gdy wersja złożeniowa odgrywa ważną rolę w ładowaniu. NET.

Jeśli zmienisz numer wersji złożenia, zmieni się tożsamość całego złożenia. Programiści będą musieli przebudować, aby odwoływać się do nowej wersji (chyba że wprowadzisz "politykę automatycznego wersjonowania"), a w czasie wykonywania tylko zespoły z pasującymi numerami wersji będą załadowany.

Jest to ważne w moim środowisku, gdzie potrzebujemy zwiększającego się, dobrze widocznego numeru wersji do celów audytu, ale nie chcemy zmuszać programistów do przebudowy lub posiadania wielu wersji jednocześnie w produkcji. W tym przypadku dla drobnych zmian zgodnych wstecznie aktualizujemy wersję pliku, ale nie wersję assembly.

 22
Author: voyce,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-18 17:25:54
Wersje plików

Są używane tylko do celów wyświetlania, podczas gdy wersja złożenia odgrywa ważną rolę w ładowaniu.NET.

Niezupełnie. Wersja pliku jest również ważna dla Instalatora Windows podczas uaktualniania istniejącej wersji nad poprzednią.
 12
Author: Mark Sowul,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-12 16:42:09

W mojej obecnej aplikacji, każdy projekt VS ma link do pliku źródłowego "AssemblyBuildInfo", który ma następujące atrybuty:

[assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyCompany("Acme Corporationy")]
[assembly: AssemblyCopyright("Copyright ©  2009 Acme Corporation")]

W ten sposób wszystkie zespoły w moim rozwiązaniu mają tę samą wersję i informacje o firmie(co oznacza, że jeśli muszę ją zmienić, zmienię ją tylko raz). Wyłączając FileVersion, jest ona automatycznie ustawiana na AssemblyVersion.

 11
Author: Philip Wallace,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-12 16:48:08

@ Adam: zmieniasz wersję pliku przy każdym build? Czy używasz kontroli wersji (SYN lub VSS) i używasz tych informacji, aby połączyć źródło z powrotem do plików binarnych?

Wydaje się mieć sens, że wersja Assembly pozostaje taka sama. tj. "2.0.0.0". Odpowiada to wdrożeniu produktu.

Wersja pliku zmienia się tak, aby pasowała do wersji z kontrolki źródłowej. "2.0.??.revision" dałoby to link z określonego dll (lub exe) do źródła, które zbudowało to.

 3
Author: Rick,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-18 15:55:13

Napisałem post na blogu na ten temat, który może być przydatny dla społeczności http://blog.raffaeu.com/archive/2011/12/11/sharing-assembly-version-in-visual-studio-2010.aspx{[2]

 2
Author: Raffaeu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-11 22:14:30

Trzymam je tak samo. Ale wtedy nie mam złożeń multifile, co jest wtedy, gdy numer AssemblyVersion staje się ważny. Używam kodowania daty w stylu Microsoft dla moich numerów kompilacji, zamiast automatycznego zwiększania (nie uważam, ile razy coś zostało zbudowane, aby było tak ważne).

 0
Author: TheSmurf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-18 15:11:51