C# Language
Przykłady AssemblyInfo.cs
Szukaj…
Uwagi
Nazwa pliku AssemblyInfo.cs
jest zwyczajowo używana jako plik źródłowy, w którym programiści umieszczają atrybuty metadanych opisujące cały zestaw, który budują.
[AssemblyTitle]
Ten atrybut służy do nadania nazwy temu konkretnemu zespołowi.
[assembly: AssemblyTitle("MyProduct")]
[AssemblyProduct]
Ten atrybut służy do opisania produktu, dla którego przeznaczony jest ten konkretny zespół. Wiele zespołów może być komponentami tego samego produktu, w którym to przypadku wszystkie mogą mieć tę samą wartość dla tego atrybutu.
[assembly: AssemblyProduct("MyProduct")]
Globalne i lokalne ZgromadzenieInfo
Posiadanie globalnego pozwala na lepszą SUSZENIE, wystarczy wstawić wartości, które są różne, do AssemblyInfo.cs dla projektów, które mają wariancję. To zastosowanie zakłada, że Twój produkt ma więcej niż jeden projekt studia wizualnego.
GlobalAssemblyInfo.cs
using System.Reflection;
using System.Runtime.InteropServices;
//using Stackoverflow domain as a made up example
// It is common, and mostly good, to use one GlobalAssemblyInfo.cs that is added
// as a link to many projects of the same product, details below
// Change these attribute values in local assembly info to modify the information.
[assembly: AssemblyProduct("Stackoverflow Q&A")]
[assembly: AssemblyCompany("Stackoverflow")]
[assembly: AssemblyCopyright("Copyright © Stackoverflow 2016")]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("4e4f2d33-aaab-48ea-a63d-1f0a8e3c935f")]
[assembly: ComVisible(false)] //not going to expose ;)
// Version information for an assembly consists of the following four values:
// roughly translated from I reckon it is for SO, note that they most likely
// dynamically generate this file
// Major Version - Year 6 being 2016
// Minor Version - The month
// Day Number - Day of month
// Revision - Build number
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below: [assembly: AssemblyVersion("year.month.day.*")]
[assembly: AssemblyVersion("2016.7.00.00")]
[assembly: AssemblyFileVersion("2016.7.27.3839")]
AssemblyInfo.cs - jeden dla każdego projektu
//then the following might be put into a separate Assembly file per project, e.g.
[assembly: AssemblyTitle("Stackoveflow.Redis")]
Możesz dodać GlobalAssemblyInfo.cs do projektu lokalnego, postępując zgodnie z następującą procedurą :
- Wybierz Dodaj / Istniejący element ... w menu kontekstowym projektu
- Wybierz GlobalAssemblyInfo.cs
- Rozwiń przycisk Dodaj, klikając małą strzałkę w dół po prawej stronie
- Wybierz „Dodaj jako link” z rozwijanej listy przycisków
[AssemblyVersion]
Ten atrybut dotyczy wersji zestawu.
[assembly: AssemblyVersion("1.0.*")]
Znak *
służy do automatycznego zwiększania części wersji automatycznie za każdym razem, gdy kompilujesz (często używany w przypadku numeru „kompilacji”)
Odczytywanie atrybutów zestawu
Korzystając z bogatych interfejsów API refleksyjnych platformy .NET, można uzyskać dostęp do metadanych zestawu. Na przykład można uzyskać atrybut tytułu this
zestawu za pomocą następującego kodu
using System.Linq;
using System.Reflection;
...
Assembly assembly = typeof(this).Assembly;
var titleAttribute = assembly.GetCustomAttributes<AssemblyTitleAttribute>().FirstOrDefault();
Console.WriteLine($"This assembly title is {titleAttribute?.Title}");
Zautomatyzowane wersjonowanie
Twój kod w kontroli źródła ma numery wersji domyślnie (identyfikatory SVN lub skróty Git SHA1) lub jawnie (tagi Git). Zamiast ręcznie aktualizować wersje w AssemblyInfo.cs, możesz użyć procesu kompilacji, aby zapisać wersję z systemu kontroli źródła w plikach AssemblyInfo.cs, a tym samym w swoich złożeniach.
Pakiety GitVersionTask lub SemVer.Git.Fody NuGet są przykładami powyższych. Aby na przykład użyć GitVersionTask, po zainstalowaniu pakietu w projekcie usuń atrybuty Assembly*Version
z plików AssemblyInfo.cs. To stawia GitVersionTask za wersjonowanie twoich zespołów.
Zauważ, że Semantic Versioning jest coraz bardziej de facto standardem, dlatego te metody zalecają stosowanie znaczników kontroli źródła, które występują po SemVer.
Wspólne pola
Dobrą praktyką jest wypełnianie domyślnych pól AssemblyInfo. Informacje mogą zostać pobrane przez instalatorów, a następnie pojawią się podczas korzystania z programów i funkcji (Windows 10) w celu odinstalowania lub zmiany programu.
Minimum powinno wynosić:
- AssemblyTitle - zwykle przestrzeń nazw, tj. MyCompany.MySolution.MyProject
- AssemblyCompany - pełna nazwa osoby prawnej
- AssemblyProduct - marketing może mieć tutaj swoje zdanie
- AssemblyCopyright - aktualizuj go, bo inaczej wygląda niechlujnie
„AssemblyTitle” staje się „opisem pliku” podczas sprawdzania karty Szczegóły właściwości biblioteki DLL.
[Konfiguracja konfiguracji]
AssemblyConfiguration: atrybut AssemblyConfiguration musi mieć konfigurację użytą do zbudowania zestawu. Użyj kompilacji warunkowej, aby poprawnie uwzględnić różne konfiguracje zestawu. Użyj bloku podobnego do poniższego przykładu. Dodaj tyle różnych konfiguracji, ile zwykle używasz.
#if (DEBUG)
[assembly: AssemblyConfiguration("Debug")]
#else
[assembly: AssemblyConfiguration("Release")]
#endif
[InternalsVisibleTo]
Jeśli chcesz, aby internal
klasy lub funkcje zestawu były dostępne z innego zestawu, zadeklaruj to przez InternalsVisibleTo
i nazwę zestawu, który może uzyskać dostęp.
W tym przykładzie kod w zestawie MyAssembly.UnitTests
może wywoływać elementy internal
z MyAssembly
.
[assembly: InternalsVisibleTo("MyAssembly.UnitTests")]
Jest to szczególnie przydatne w przypadku testów jednostkowych, aby zapobiec niepotrzebnym public
deklaracjom.
[AssemblyKeyFile]
Ilekroć chcemy, aby nasz zespół instalował się w GAC, musi mieć silną nazwę. W przypadku silnego zestawu nazewnictwa musimy utworzyć klucz publiczny. Aby wygenerować plik .snk
.
Aby utworzyć plik klucza silnej nazwy
- Wiersz polecenia programistów dla VS2015 (z dostępem administratora)
- W wierszu polecenia wpisz cd C: \ Directory_Name i naciśnij klawisz ENTER.
- W wierszu polecenia wpisz sn -k KeyFileName.snk, a następnie naciśnij klawisz ENTER.
po utworzeniu keyFileName.snk w określonym katalogu, daj refernację w swoim projekcie. podaj atrybut AssemblyKeyFileAttribute
ścieżkę do pliku snk
, aby wygenerować klucz podczas budowania naszej biblioteki klas.
Właściwości -> AssemblyInfo.cs
[assembly: AssemblyKeyFile(@"c:\Directory_Name\KeyFileName.snk")]
Thi stworzy silny zestaw nazw po kompilacji. Po utworzeniu zestawu silnych nazw możesz go zainstalować w GAC
Happy Coding :)