Sök…


Anmärkningar

Filnamnet AssemblyInfo.cs används av konvention som källfil där utvecklare placerar metadataattribut som beskriver hela enheten som de bygger.

[AssemblyTitle]

Det här attributet används för att ge ett namn till just den här enheten.

[assembly: AssemblyTitle("MyProduct")]

[AssemblyProduct]

Det här attributet används för att beskriva produkten som den här enheten är avsedd för. Flera enheter kan vara komponenter i samma produkt, i vilket fall alla kan dela samma värde för detta attribut.

[assembly: AssemblyProduct("MyProduct")]

Global och lokal AssemblyInfo

Genom att ha en global möjliggör bättre DRYness, behöver du bara lägga värden som är olika i AssemblyInfo.cs för projekt som har varians. Denna användning förutsätter att din produkt har mer än ett visuellt studioprojekt.

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 - ett för varje projekt

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

Du kan lägga till GlobalAss AssemblyInfo.cs till det lokala projektet med följande procedur :

  1. Välj Lägg till / befintligt objekt ... i projektets sammanhangsmeny
  2. Välj GlobalAss AssemblyInfo.cs
  3. Expandera tilläggsknappen genom att klicka på den lilla nedpilen till höger
  4. Välj "Lägg till som länk" i rullgardinsmenyn för knappar

[AssemblyVersion]

Detta attribut tillämpar en version på monteringen.

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

Tecknet * används för att automatiskt öka en del av versionen automatiskt varje gång du sammanställer (ofta används för "build" -numret)

Läser församlingsattribut

Med hjälp av .NETs rika reflektions-API: er kan du få tillgång till en församlings metadata. Till exempel kan du få this församlings titelattribut med följande kod

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

Automatiserad versionering

Din kod i källkontroll har versionnummer antingen som standard (SVN-id eller Git SHA1 hash) eller uttryckligen (Git-taggar). Istället för att manuellt uppdatera versioner i AssemblyInfo.cs kan du använda en byggtidsprocess för att skriva versionen från ditt källkontrollsystem till dina AssemblyInfo.cs-filer och därmed till dina enheter.

GitVersionTask- eller SemVer.Git.Fody NuGet-paketen är exempel på ovanstående. För att använda GitVersionTask, till exempel, efter att ha installerat paketet i ditt projekt, ta bort attributen Assembly*Version från dina AssemblyInfo.cs-filer. Detta sätter GitVersionTask ansvarig för att versionera dina enheter.

Observera att Semantic Versioning alltmer är de facto- standarden så dessa metoder rekommenderar att du använder källkontrolltaggar som följer SemVer.

Vanliga fält

Det är god praxis att fylla i dina AssemblyInfos standardfält. Informationen kan hämtas av installatörer och visas då när du använder Program och funktioner (Windows 10) för att avinstallera eller ändra ett program.

Minsta bör vara:

  • AssemblyTitle - vanligtvis namnområdet, dvs. MyCompany.MySolution.MyProject
  • AssemblyCompany - de juridiska personernas fulla namn
  • AssemblyProduct - marknadsföring kan ha en vy här
  • AssemblyCopyright - håll den uppdaterad eftersom den ser snygg ut på annat sätt

'AssemblyTitle' blir 'Filbeskrivning' när man undersöker DLL-fliken Egenskapsdetaljer.

[AssemblyConfiguration]

AssemblyConfiguration: Attributet AssemblyConfiguration måste ha den konfiguration som användes för att bygga enheten. Använd villkorlig kompilering för att inkludera olika monteringskonfigurationer på rätt sätt. Använd blocket som liknar exemplet nedan. Lägg till så många olika konfigurationer som du vanligtvis använder.

#if (DEBUG)

[assembly: AssemblyConfiguration("Debug")]

#else

[assembly: AssemblyConfiguration("Release")]

#endif

[InternalsVisibleTo]

Om du vill göra internal klasser eller funktioner i en enhet åtkomliga från en annan montering förklarar du detta av InternalsVisibleTo och det samlingsnamn som får åtkomst.

I det här exemplet MyAssembly.UnitTests kod i enheten MyAssembly.UnitTests att ringa internal element från MyAssembly .

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

Detta är särskilt användbart för enhetstester för att förhindra onödiga public deklarationer.

[AssemblyKeyFile]

När vi vill att vår montering ska installeras i GAC måste den ha ett starkt namn. För en stark namnsamling måste vi skapa en offentlig nyckel. För att generera .snk filen.

För att skapa en stark namnnyckelfil

  1. Utvecklare kommandotolk för VS2015 (med administratörsåtkomst)
  2. Skriv cd C: \ Directory_Name vid kommandotolken och tryck på ENTER.
  3. Skriv sn-k KeyFileName.snk vid kommandoprompten och tryck sedan på ENTER.

när keyFileName.snk har skapats i den angivna katalogen, ge referens i ditt projekt. ge AssemblyKeyFileAttribute attribut sökvägen till snk fil för att generera nyckeln när vi bygger vårt klassbibliotek.

Egenskaper -> AssemblyInfo.cs

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

Thi kommer att skapa en stark namnmontering efter build. När du har skapat din starka namnmontering kan du installera den i GAC

Happy Coding :)



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow