Suche…


Bemerkungen

Der Dateiname AssemblyInfo.cs wird von der Konvention als Quelldatei verwendet, in der Entwickler Metadatenattribute platzieren, die die gesamte Assembly beschreiben, die sie erstellen.

[AssemblyTitle]

Dieses Attribut wird verwendet, um dieser bestimmten Assembly einen Namen zu geben.

[assembly: AssemblyTitle("MyProduct")]

[Montageprodukt]

Dieses Attribut wird verwendet, um das Produkt zu beschreiben, für das diese bestimmte Baugruppe bestimmt ist. Mehrere Baugruppen können Komponenten desselben Produkts sein. In diesem Fall können sie alle denselben Wert für dieses Attribut haben.

[assembly: AssemblyProduct("MyProduct")]

Globale und lokale AssemblyInfo

Da ein globaler Code eine bessere DRYness ermöglicht, müssen Sie für Projekte, die Abweichungen aufweisen, nur andere Werte in AssemblyInfo.cs eingeben. Diese Verwendung setzt voraus, dass Ihr Produkt mehr als ein visuelles Studio-Projekt hat.

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 - eine für jedes Projekt

//then the following might be put into a separate Assembly file per project, e.g.
[assembly: AssemblyTitle("Stackoveflow.Redis")]

Sie können GlobalAssemblyInfo.cs mit dem folgenden Verfahren zum lokalen Projekt hinzufügen:

  1. Wählen Sie im Kontextmenü des Projekts Hinzufügen / Vorhandenes Element
  2. Wählen Sie GlobalAssemblyInfo.cs aus
  3. Erweitern Sie den Add-Button, indem Sie auf den kleinen Abwärtspfeil auf der rechten Seite klicken
  4. Wählen Sie "Als Link hinzufügen" in der Dropdown-Liste der Schaltflächen aus

[AssemblyVersion]

Dieses Attribut wendet eine Version auf die Assembly an.

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

Das Zeichen * wird verwendet, um einen Teil der Version bei jedem Kompilieren automatisch zu inkrementieren (häufig für die Build-Nummer)

Baugruppenattribute lesen

Mit den umfangreichen Reflection-APIs von .NET können Sie auf die Metadaten einer Assembly zugreifen. Sie können beispielsweise das Titelattribut this Assembly mit dem folgenden Code abrufen

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}");

Automatisierte Versionierung

Ihr Code in der Quellcodeverwaltung enthält Versionsnummern entweder standardmäßig (SVN-IDs oder Git-SHA1-Hashes) oder explizit (Git-Tags). Anstatt Versionen in AssemblyInfo.cs manuell zu aktualisieren, können Sie einen Build-Time-Prozess verwenden, um die Version von Ihrem Quellcodeverwaltungssystem in Ihre AssemblyInfo.cs-Dateien und somit in Ihre Assemblys zu schreiben.

Die GitVersionTask- oder SemVer.Git.Fody- NuGet-Pakete sind Beispiele dafür. Um beispielsweise GitVersionTask zu verwenden, entfernen Sie nach der Installation des Pakets in Ihrem Projekt die Attribute Assembly*Version aus den Dateien AssemblyInfo.cs. Dadurch wird GitVersionTask für die Versionierung Ihrer Baugruppen verantwortlich.

Beachten Sie, dass Semantic Versioning zunehmend der De-facto- Standard ist. Daher empfehlen diese Methoden die Verwendung von Quellcode-Tags, die SemVer folgen.

Gemeinsame Felder

Es ist empfehlenswert, die Standardfelder Ihrer AssemblyInfo auszufüllen. Die Informationen können von den Installationsprogrammen abgeholt werden und erscheinen dann, wenn Sie Programme und Funktionen (Windows 10) zum Deinstallieren oder Ändern eines Programms verwenden.

Das Minimum sollte sein:

  • AssemblyTitle - normalerweise der Namespace, z. B. MyCompany.MySolution.MyProject
  • AssemblyCompany - der vollständige Name der juristischen Personen
  • AssemblyProduct - Marketing kann hier einen Blick haben
  • AssemblyCopyright - halten Sie es auf dem neuesten Stand, da es sonst schlecht aussieht

"AssemblyTitle" wird zur "Dateibeschreibung", wenn Sie die Registerkarte "Eigenschaften" der DLL untersuchen.

[AssemblyConfiguration]

AssemblyConfiguration: Das AssemblyConfiguration-Attribut muss über die Konfiguration verfügen, mit der die Assembly erstellt wurde. Verwenden Sie die bedingte Kompilierung, um verschiedene Assembly-Konfigurationen ordnungsgemäß aufzunehmen. Verwenden Sie den Block ähnlich dem folgenden Beispiel. Fügen Sie beliebig viele verschiedene Konfigurationen hinzu.

#if (DEBUG)

[assembly: AssemblyConfiguration("Debug")]

#else

[assembly: AssemblyConfiguration("Release")]

#endif

[InternalsVisibleTo]

Wenn Sie internal Klassen oder Funktionen einer Assembly von einer anderen Assembly aus zugänglich machen möchten, geben Sie dies mit InternalsVisibleTo und dem Assemblynamen an, auf den zugegriffen werden darf.

In diesem Beispielcode in der Assembly darf MyAssembly.UnitTests internal Elemente von MyAssembly .

[assembly: InternalsVisibleTo("MyAssembly.UnitTests")]

Dies ist besonders nützlich für Komponententests, um unnötige public Deklarationen zu verhindern.

[AssemblyKeyFile]

Wann immer wir möchten, dass unsere Baugruppe in GAC installiert wird, muss sie einen starken Namen haben. Für eine starke Namenserstellung müssen wir einen öffentlichen Schlüssel erstellen. So generieren Sie die .snk Datei

So erstellen Sie eine Schlüsseldatei mit starkem Namen

  1. Entwickler-Eingabeaufforderung für VS2015 (mit Administratorzugriff)
  2. Geben Sie an der Eingabeaufforderung cd C: \ Directory_Name ein, und drücken Sie die EINGABETASTE.
  3. Geben Sie an der Eingabeaufforderung sn -k KeyFileName.snk ein, und drücken Sie die EINGABETASTE.

Sobald die keyFileName.snk im angegebenen Verzeichnis erstellt wurde, geben Sie in Ihrem Projekt eine Referenz an. Geben Sie dem Attribut AssemblyKeyFileAttribute den Pfad zur snk Datei an, um den Schlüssel zu generieren, wenn Sie unsere Klassenbibliothek erstellen.

Eigenschaften -> AssemblyInfo.cs

[assembly: AssemblyKeyFile(@"c:\Directory_Name\KeyFileName.snk")]

Nach dem Build wird eine starke Namensassemblierung erstellt. Nachdem Sie Ihre starke Namensassembly erstellt haben, können Sie sie in GAC installieren

Viel Spaß beim Codieren :)



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow