Zastanawiałem się, jak mogę automatycznie zwiększyć kompilację (i wersję?) Moich plików za pomocą Visual Studio (2005).
Jeśli sprawdzę właściwości powiedzmy C:\Windows\notepad.exe
, zakładka Wersja pokazuje „Wersja pliku: 5.1.2600.2180”. Chciałbym uzyskać te fajne liczby również w wersji mojej biblioteki DLL, a nie w wersji 1.0.0.0, co, powiedzmy, jest trochę nudne.
Próbowałem kilku rzeczy, ale nie wygląda to na gotową funkcjonalność, a może po prostu szukam w niewłaściwym miejscu (jak zwykle).
Pracuję głównie przy projektach internetowych ....
Patrzyłem na oba:
- http://www.codeproject.com/KB/dotnet/Auto_Increment_Version.aspx
- http://www.codeproject.com/KB/dotnet/build_versioning.aspx
i nie mogłem uwierzyć, że tyle wysiłku, aby coś zrobić, to standardowa praktyka.
EDYCJA: O ile mogę powiedzieć, nie działa w VS2005 ( http://www.codeproject.com/KB/dotnet/AutoIncrementVersion.aspx )
Odpowiedzi:
W Visual Studio 2008 następujące prace.
Znajdź plik AssemblyInfo.cs i znajdź te 2 linie:
Możesz spróbować zmienić to na:
Ale to nie da pożądanego rezultatu, skończysz z wersją produktu 1.0. * I wersją pliku 1.0.0.0 . Nie to, czego chcesz!
Jeśli jednak usuniesz drugą z tych linii i po prostu masz:
Następnie kompilator ustawi Wersję pliku na równą Wersji produktu i uzyskasz pożądany wynik automatycznego przyrostu produktu i wersji pliku, które są zsynchronizowane. Np. 1.0.3266.92689
źródło
otwórz plik AssemblyInfo.cs i zmień
do
możesz to zrobić w IDE, przechodząc do projektu -> właściwości -> informacje o złożeniu
Pozwoli to jednak tylko na automatyczne zwiększenie wersji zestawu i da ci
pole wiadomości, jeśli spróbujesz umieścić * w polu wersji pliku.
Więc po prostu otwórz plik assemblyinfo.cs i zrób to ręcznie.
źródło
Inną opcją zmiany numerów wersji w każdej kompilacji jest użycie zadania Wersja MSBuild.Community.Tasks . Wystarczy pobrać ich instalator, zainstalować go, a następnie dostosować następujący kod i wkleić go
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
w.csproj
pliku:Uwaga: Dostosuj właściwość StartDate do swoich ustawień regionalnych. Obecnie nie wykorzystuje niezmiennej kultury.
W przypadku trzeciej kompilacji 14 stycznia 2010 r. Utworzy to
VersionInfo.cs
następującą treść:Plik ten należy następnie dodać do projektu (poprzez Dodaj istniejący element ),
AssemblyVersion
aAssemblyFileVersion
linie i należy usunąć zAssemblyInfo.cs
.Różne algorytmy zmiany komponentów wersji są opisane w
$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.chm
i Właściwościach wersji .źródło
Wymyśliłem rozwiązanie podobne do chrześcijan, ale bez zależności od zadań społeczności MSBuild, nie jest to dla mnie opcja, ponieważ nie chcę instalować tych zadań dla wszystkich naszych programistów.
Generuję kod i kompiluję do zestawu i chcę automatycznie zwiększać numery wersji. Nie mogę jednak użyć VS 6.0. * AssemblyVersion sztuczka, ponieważ automatycznie zwiększa liczbę kompilacji każdego dnia i psuje kompatybilność ze złożeniami, które używają starszej liczby kompilacji. Zamiast tego chcę mieć zakodowane na stałe AssemblyVersion, ale automatycznie zwiększające wartość AssemblyFileVersion. Osiągnąłem to, określając AssemblyVersion w AssemblyInfo.cs i generując VersionInfo.cs w MSBuild w ten sposób,
Spowoduje to wygenerowanie pliku VersionInfo.cs z atrybutem Assembly dla AssemblyFileVersion, w którym wersja jest zgodna ze schematem YY.MM.DD.TTTT z datą kompilacji. Musisz dołączyć ten plik do swojego projektu i budować z nim.
źródło
[System.DateTime]::Now
jedną z nich, w przeciwnym razie istnieje warunek wyścigu, który może spowodować użycie starego numeru kompilacji, jeśli buduje się blisko północy.DateTime.ToString
dla celów demonstracyjnych, czy jest jakiś konkretny powód?Zainstaluj dodatek do wersji kompilacji . Daje ci to większą kontrolę niż opcja *.
źródło
Aby uzyskać numery wersji, spróbuj
Aby ustawić numer wersji, utwórz / edytuj plik AssemblyInfo.cs
Na marginesie, trzecia liczba to liczba dni od 2/1/2000, a czwarta liczba to połowa całkowitej liczby sekund w ciągu dnia. Więc jeśli kompilujesz o północy, powinna wynosić zero.
źródło
Istnieje rozszerzenie studio wizualne Wersje automatyczne Visual Studio które obsługuje Visual Studio (2012, 2013, 2015) 2017 i 2019.
Zrzuty ekranu
źródło
Ustawienie * w numerze wersji w AssemblyInfo lub we właściwościach projektu, jak opisano w innych postach, nie działa ze wszystkimi wersjami Visual Studio / .NET.
Afaik to nie działało w VS 2005 (ale w VS 2003 i VS 2008). W przypadku VS 2005 można użyć: Autoakrecji Numer wersji kompilacji i wersji Visual Studio 2005 w czasie kompilacji .
Należy jednak pamiętać, że automatyczna zmiana numeru wersji nie jest zalecana w przypadku zespołów o silnych nazwach. Powodem jest to, że wszystkie odniesienia do takiego zestawu należy aktualizować za każdym razem, gdy zespół, do którego następuje odwołanie, jest przebudowywany, ponieważ odwołania do zestawu o silnej nazwie są zawsze odniesieniem do określonej wersji zestawu. Same Microsoft zmieniają numer wersji zestawów .NET Framework tylko wtedy, gdy nastąpią zmiany w interfejsach. (NB: Wciąż szukam linku w MSDN, gdzie go przeczytałem).
źródło
Aby uzyskać informacje o inkrementacji (DateTime) we właściwości AssemblyFileVersion, która ma tę zaletę, że nie przerywa żadnych zależności.
Opierając się na rozwiązaniu Boog (nie działało dla mnie, może z powodu VS2008?), Możesz użyć kombinacji zdarzenia przed kompilacją generującego plik, dodając ten plik (w tym jego właściwości wersji), a następnie korzystając ze sposobu odczytu te wartości ponownie. To jest..
Wydarzenie przed kompilacją:
Dołącz wynikowy plik VersionInfo.cs (podfolder Właściwości) do swojego projektu
Kod, aby odzyskać datę (lata do sekund):
Niezbyt wygodne .. nie wiem też, czy powoduje to wiele przebudowań wymuszonych (ponieważ plik zawsze się zmienia).
Możesz uczynić go mądrzejszym, na przykład, jeśli aktualizujesz plik VersionInfo.cs co kilka minut / godzin (używając pliku tymczasowego, a następnie kopiując / zastępując prawdziwy plik VersionInfo.cs, jeśli wykryje się wystarczająco dużą zmianę). Zrobiłem to raz całkiem pomyślnie.
źródło
Ustaw numer wersji na „1.0. *”, A automatycznie wypełni dwa ostatnie numery datą (w dniach od pewnego momentu) i godziną (pół sekundy od północy)
źródło
Jest to we właściwościach projektu w obszarze Publikuj
(~ http://screencast.com/t/Vj7rhqJO )
źródło
Ciasto obsługuje łatanie plików AssemblyInfo. Z ciastem w rękach masz nieskończone możliwości implementacji automatycznego zwiększania wersji.
Prosty przykład wersji przyrostowej, takiej jak kompilator C #:
Tutaj:
Pamiętaj, że możesz łatać nie tylko wersje, ale także wszystkie inne niezbędne informacje .
źródło
Przejdź do projektu | Właściwości, a następnie Informacje o złożeniu, a następnie Wersja zestawu i wstaw * w ostatnim lub przedostatnim polu (nie można automatycznie zwiększać głównych lub mniejszych elementów).
źródło
Użyj zadania AssemblyInfo z Zadań społeczności MSBuild ( http://msbuildtasks.tigris.org/ ) i zintegruj je z plikiem .csproj / .vbproj.
Ma wiele opcji, w tym jedną, aby powiązać numer wersji z datą i godziną.
Zalecana.
źródło
W tej chwili dla mojej aplikacji
zwroty
ver = 1.0.3251.27860
Wartość 3251 to liczba dni od 1/1/2000. Używam go do umieszczania daty utworzenia wersji na ekranie powitalnym mojej aplikacji. W kontaktach z użytkownikiem mogę zapytać o datę utworzenia, która jest łatwiejsza do przekazania niż jakaś długa liczba.
(Jestem jednoosobowym działem wspierającym małą firmę. Takie podejście może ci nie pomóc.)
źródło
Zmiana AssemblyInfo działa w VS2012. Wydaje się dziwne, że nie ma już obsługi tego w Visual Studio, można by pomyśleć, że była to podstawowa część procesu kompilacji / wydania.
źródło
Jak uzyskać wersję
{major}.{year}.1{date}.1{time}
Ten jest w pewnym sensie eksperymentalny, ale podoba mi się. Inspirowany przez Jeffa Atwooda @ CodingHorror ( link ).
Wynikowy numer wersji staje się
1.2016.10709.11641
(czyli 2016-07-09 16:41), co pozwala1
)Dodaj nowy element do projektu, wybierz Ogólne -> Szablon tekstowy, nazwij go jak
CustomVersionNumber
i (jeśli dotyczy) skomentujAssemblyVersion
iAssemblyFileVersion
weProperties/AssemblyInfo.cs
.Następnie, podczas zapisywania tego pliku lub budowania projektu, spowoduje to ponowne wygenerowanie
.cs
pliku znajdującego się jako podelement w utworzonym.tt
pliku.źródło
Utworzyłem aplikację do automatycznego zwiększania wersji pliku.
dodaj następujący wiersz do wiersza poleceń zdarzenia przed kompilacją
C: \ temp \ IncrementFileVersion.exe $ (SolutionDir) \ Properties \ AssemblyInfo.cs
Zbuduj projekt
Aby to uprościć, aplikacja wyświetla komunikaty tylko w przypadku wystąpienia błędu, aby potwierdzić, że działa poprawnie, należy sprawdzić wersję pliku w „Informacje o montażu”
Uwaga: Będziesz musiał ponownie załadować rozwiązanie w Visual Studio dla przycisku „Informacje o złożeniu”, aby wypełnić pola, jednak plik wyjściowy będzie miał zaktualizowaną wersję.
Sugestie i prośby napisz do mnie na [email protected]
źródło
W Visual Studio 2019
Nie wystarczyło mi dodanie
Podczas budowania rzuca mi ten błąd
Rozwiązanie
Format został ostatecznie przyjęty po ustawić
Deterministic
abyFalse
wproject.csproj
Edytować:
Z jakiegoś powodu ustawienie
Deterministic
naFalse
zawiedli mojego pliku konfiguracyjnym ładuje go i zapisanie go w różnych miejscach.Obejście:
Konfiguruję zdarzenie po kompilacji, aby zwiększyć numer wersji:
Skrypt wsadowy zdarzenia po kompilacji
To wywołuje skrypt PowerShell o nazwie
autoincrement_version.ps1
przekazywanie jako argument ścieżkiAssemblyInfo.cs
Skrypt Poweshell
Automatycznie zwiększa numer wersji za pomocą Regex
źródło
Może do tego zadania możesz użyć takiego kodu:
i wywołaj go z formularza ładowania.
Za pomocą tego kodu możesz zaktualizować dowolną część informacji o pliku w AssemblyInfo.cs (ale musisz użyć „standardowej” struktury katalogów).
źródło
AssemblyInfoUtil . Wolny. Otwarte źródło.
źródło
Używam tego podejścia https://stackoverflow.com/a/827209/3975786 , umieszczając szablon T4 w „Elementach rozwiązania” i używam go z „Dodaj jako łącze” w ramach każdego projektu.
źródło
Być może jest już za późno, aby odpowiedzieć tutaj, ale mam nadzieję, że rozwiąże czyjś gorączkowy problem.
Automatyczny sposób zmiany wersji zestawu wszystkich projektów za pomocą skryptu PowerShell. Ten artykuł rozwiąże wiele twoich problemów.
źródło
Za każdym razem, gdy robię kompilację, automatycznie zwiększa najmniej znaczącą cyfrę.
Nie mam pojęcia, jak zaktualizować pozostałe, ale przynajmniej powinieneś już to zobaczyć ...
źródło
Dla każdego używającego Tortoise Subversion możesz powiązać jeden ze swoich numerów wersji z numerem wersji subversion twojego kodu źródłowego. Uważam to za bardzo przydatne (Audytorzy też to lubią!). Robisz to, wywołując narzędzie WCREV we wcześniejszej kompilacji i generując plik AssemblyInfo.cs z szablonu.
Jeśli szablon nazywa się AssemblyInfo.wcrev i znajduje się w normalnym katalogu AssemblyInfo.cs, a żółw znajduje się w domyślnym katalogu instalacyjnym, wówczas polecenie Pre-Build wygląda następująco (NB Wszystkie w jednym wierszu):
Plik szablonu zawierałby łańcuch podstawiania tokena wcrev: $ WCREV $
np
Uwaga:
Ponieważ plik AssemblyInfo.cs jest teraz generowany, nie chcesz, aby kontrolowano jego wersję.
źródło