Mam rozwiązanie z wieloma projektami. Próbuję zoptymalizować pliki AssemblyInfo.cs, łącząc jeden plik informacji o zespole dla całego rozwiązania. Jakie są najlepsze praktyki w tym zakresie? Które atrybuty powinny znajdować się w pliku dla całego rozwiązania, a które są specyficzne dla projektu / zespołu?
Edycja: Jeśli jesteś zainteresowany, pojawia się pytanie uzupełniające. Jakie są różnice między AssemblyVersion, AssemblyFileVersion i AssemblyInformationalVersion?
.net
assemblies
attributes
assemblyinfo
Jakub Šturc
źródło
źródło
AssemblyCultureAttribute
Zasługuje na lepsze wyjaśnienie. Najlepiej, aby atrybut był całkowicie nieobecny (chyba że jest to zestaw satelitarny). Podczas korzystania z zestawów satelitów na dużą skalę, potrzebne mogą być trzy, a nie dwa poziomy plików informacyjnych zespołu (globalny, zespół główny i zespół satelitarny, który określa tylko kulturę w tym przypadku).W moim przypadku budujemy produkt, dla którego mamy rozwiązanie Visual Studio, z różnymi komponentami we własnych projektach. Idą wspólne atrybuty. W rozwiązaniu istnieje około 35 projektów i wspólne informacje o zestawie (CommonAssemblyInfo.cs), które mają następujące atrybuty:
Inne atrybuty, takie jak AssemblyTitle, AssemblyVersion itp., Dostarczamy na podstawie zestawu. Podczas budowania zespołu zarówno AssemblyInfo.cs, jak i CommonAssemblyInfo.cs są wbudowane w każdy zespół. Daje nam to to, co najlepsze z obu światów, w których możesz chcieć mieć pewne wspólne atrybuty dla wszystkich projektów i określone wartości dla innych.
Mam nadzieję, że to pomoże.
źródło
<Compile Include="$(MSBuildThisFileDirectory)..\Common\CommonAssemblyInfo.cs"/>
, w dyrektywie MSBuild, która może nawet znajdować się wCommon.targets
pliku udostępnionym . Ponowne wykorzystanie kodu Yay.Rozwiązanie przedstawione przez @JRoppert jest prawie takie samo jak to, co robię. Jedyną różnicą jest to, że umieściłem następujące wiersze w lokalnym pliku AssemblyInfo.cs, ponieważ mogą się one różnić w zależności od każdego zespołu:
Używam również (ogólnie) jednej wspólnej informacji o montażu na rozwiązanie, przy założeniu, że jedno rozwiązanie to pojedyncza linia produktów / produkt do wydania. Wspólny plik informacji o zespole zawiera również:
Który ustawi wartość „ProductVersion” wyświetlaną przez Eksploratora Windows.
źródło
Zadania społeczności MSBuild zawiera niestandardowe zadanie o nazwie AssemblyInfo, którego można użyć do wygenerowania pliku assemblyinfo.cs. Wymaga niewielkiej ręcznej edycji plików csproj, ale warto.
źródło
Moim zdaniem korzystanie z GlobalAssemblyInfo.cs jest bardziej kłopotliwe niż warte, ponieważ musisz zmodyfikować każdy plik projektu i pamiętać o modyfikacji każdego nowego projektu, podczas gdy domyślnie dostajesz AssemblyInfo.cs.
W przypadku zmian wartości globalnych (np. Firmy, produktu itp.) Zmiany są zwykle tak rzadkie i proste w zarządzaniu, że nie sądzę, aby kwestia DRY była brana pod uwagę. Po prostu uruchom następujący skrypt MSBuild (zależny od pakietu MSBuild Extension Pack ), jeśli chcesz ręcznie zmienić wartości we wszystkich projektach jako jednorazowe:
źródło
Aby udostępnić plik między wieloma projektami, możesz dodać istniejący plik jako łącze.
Aby to zrobić, dodaj istniejący plik i kliknij „Dodaj jako łącze” w selektorze plików. (źródło: free.fr )
Jeśli chodzi o to, co umieścić w udostępnionym pliku, sugerowałbym umieszczenie rzeczy, które byłyby udostępniane w zespołach. Rzeczy takie jak prawa autorskie, firma, być może wersja.
źródło
Używanie jednego pliku AseemblyInfo.cs dla wielu projektów nie jest zalecane. Plik AssemblyInfo zawiera informacje, które mogą być istotne tylko dla tego konkretnego zestawu. Dwie najbardziej oczywiste informacje to
AssemblyTitle
iAssemblyVersion
.Lepszym rozwiązaniem może być użycie
targets
pliku obsługiwanego przez MSBuild w celu „wstrzyknięcia” atrybutów zestawu do więcej niż jednego projektu.źródło
Jedną z rzeczy, które uznałem za przydatne, jest generowanie elementów AssemblyVersion (itp.) Przez zastosowanie podstawiania tokenów w fazie wstępnej kompilacji.
Używam TortoiseSVN, i łatwo jest wykorzystać swoje
SubWCRev.exe
włączyć szablonAssemblyInfo.wcrev
doAssemblyInfo.cs
. Odpowiednia linia w szablonie może wyglądać mniej więcej tak:Trzeci element to numer rewizji. Czwartego elementu używam do sprawdzenia, czy nie zapomniałem zatwierdzić żadnych nowych lub zmienionych plików (czwarty element to 00, jeśli wszystko jest w porządku).
Nawiasem mówiąc, dodaj
AssemblyInfo.wcrev
do kontroli wersji i zignoruj,AssemblyInfo.cs
jeśli tego używasz.źródło