2012-04-19 15 views
43

mówi w AssemblyInfo.cs dla C# projektów, że jest możliwe, aby określić informacje o wersji z *AssemblyInfo informacje o wersji gwiazdkami

// Version information for an assembly consists of the following four values: 
// 
//  Major Version 
//  Minor Version 
//  Build Number 
//  Revision 
// 
// You can specify all the values or you can default the Revision and Build Numbers 
// by using the '*' as shown below: 
[assembly: AssemblyVersion("1.0.0.0")] 
[assembly: AssemblyFileVersion("1.0.0.0")] 

Zmieniłem go w ten sposób:

[assembly: AssemblyVersion("1.0.*.*")] 
[assembly: AssemblyFileVersion("1.0.*.*")] 

i to jest błąd Dostaję z kompilatora:

error CS0647: Error emitting 'System.Reflection.AssemblyVersionAttribute' attribute -- 'The version specified '1.0.*.*' is invalid' 
warning CS1607: Assembly generation -- The version '1.0.*.*' specified for the 'file version' is not in the normal 'major.minor.build.revision' format 

Jak to działa (czy nawet?) Działa?

Odpowiedz

61

Składnia (patrz MSDN) dla "automatyczny" Numer kompilacji mogą być:

[assembly: AssemblyVersion("1.0.0.*")] 

czyli

[assembly: AssemblyVersion("1.0.*")] 

* oznacza po tym wszystko jest automatyczne. Nie można mieć automatyczny numer kompilacji i stałe numer wersji to ta składnia nie jest poprawna:

[assembly: AssemblyVersion("1.0.*.0")] 

Dla AssemblyFileVersionAttribute nie można używać znaków specjalnych * więc trzeba zapewnić pełny i prawidłowy numer wersji . Pamiętaj, że jeśli nie dostarczysz an AssemblyFileVersionAttribute, to automatycznie uzyskasz prawo FileVersionInfo (z tą samą wersją AssemblyVersionAttribute). Musisz określić ten atrybut tylko wtedy, gdy musisz ustawić inną wersję.

+3

Nie działa dla mnie. Wersja pliku w bibliotece DLL to zawsze 1.0.0.0, a wersja produktu w bibliotece DLL to 1.0. * Lub 1.0.0. *? – mare

+1

co z , pokazuje również ten sam nieprawidłowy błąd – shyamnathan

+1

@shyamnathan tak, każda część musi być 16-bitową liczbą całkowitą bez znaku - 1, więc nie możesz użyć niczego innego niż' * '(i tylko w' xy * ' lub 'xyz *' form.) Oczywiście, chyba że jest to rodzaj elementu zastępczego i stosujesz pewien rodzaj przetwarzania wstępnego (przydatne, jeśli nie masz wspólnych informacji o złożeniu i chcesz zachować wyrównanie wersji na różnych złożeniach). , każdy niepoprawny numer wersji da tę wiadomość, bez względu na to, która jest przyczyna: –

26
[assembly: AssemblyVersion("1.0.*")] 
//[assembly: AssemblyFileVersion("1.0.*")] 

Pamiętaj tylko, aby skomentować linię AssemblyFileVersion, w przeciwnym razie automatycznie wygenerowana wersja zespołu będzie zawsze "1.0.0.0".

+1

Dlaczego powinien to robić? – Default

+0

automatycznie wygenerowana wersja zespołu zawsze będzie "1.0.0.0", tak się dzieje z moim rozwiązaniem. – chamos

+0

Pozwól, że zasugeruję, że "edytujesz" swoją odpowiedź i dodasz również te informacje. "może nie działać zgodnie z oczekiwaniami" nie wyjaśnia dokładnie, dlaczego PO powinien postępować zgodnie z tą sugestią, w porównaniu z odpowiedzią udzieloną przez [Adriano] (http://stackoverflow.com/a/10229738/238902). – Default

3

Moim zdaniem użycie numeru [assembly: AssemblyVersion("x.y.z.*")], Patch nie powinno być automatycznie numerowane. Np:

[montaż: AssemblyVersion ("1.2.3 *")]

Korzystanie '*' w AssemblyVersion jest dobra, ale postępuj seemver.org powinniśmy używać * dla revision części ze struktury wersji <major version>.<minor version>.<build number>.<revision>).

Biorąc pod numer wersji MAJOR.MINOR.PATCH, zwiększamy:

wersji głównej po dokonaniu zmian niezgodnych API,

wersja MINOR podczas dodawania funkcji w wstecznie kompatybilny sposób, a

Wersja PATCH po wprowadzeniu zgodnych z wcześniejszymi wersjami poprawek.

Powiązane problemy