C# Language
AssemblyInfo.cs Esempi
Ricerca…
Osservazioni
Il nome file AssemblyInfo.cs
viene utilizzato per convenzione come il file di origine in cui gli sviluppatori inseriscono attributi di metadati che descrivono l'intero assembly che stanno creando.
[AssemblyTitle]
Questo attributo è usato per dare un nome a questo particolare assemblaggio.
[assembly: AssemblyTitle("MyProduct")]
[AssemblyProduct]
Questo attributo viene utilizzato per descrivere il prodotto per cui è destinato questo particolare assieme. Più assiemi possono essere componenti dello stesso prodotto, nel qual caso possono tutti condividere lo stesso valore per questo attributo.
[assembly: AssemblyProduct("MyProduct")]
AssemblyInfo globale e locale
Avere un globale consente una migliore DEUMIDITÀ, è necessario solo inserire valori diversi in AssemblyInfo.cs per i progetti con varianza. Questo uso presuppone che il tuo prodotto abbia più di un progetto di Visual Studio.
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 - uno per ogni progetto
//then the following might be put into a separate Assembly file per project, e.g.
[assembly: AssemblyTitle("Stackoveflow.Redis")]
È possibile aggiungere GlobalAssemblyInfo.cs al progetto locale utilizzando la seguente procedura :
- Seleziona Aggiungi / elemento esistente ... nel menu di scelta rapida del progetto
- Seleziona GlobalAssemblyInfo.cs
- Espandi il pulsante Aggiungi facendo clic su quella piccola freccia in giù sulla mano destra
- Seleziona "Aggiungi come collegamento" nell'elenco a discesa dei pulsanti
[AssemblyVersion]
Questo attributo applica una versione all'assembly.
[assembly: AssemblyVersion("1.0.*")]
Il carattere *
viene utilizzato per incrementare automaticamente una porzione della versione automaticamente ogni volta che si compila (spesso utilizzato per il numero "build")
Lettura degli attributi dell'assieme
Utilizzando le API di riflessioni avanzate di .NET, puoi accedere ai metadati di un assembly. Ad esempio, è possibile ottenere l'attributo del titolo di this
assembly con il seguente codice
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}");
Controllo delle versioni automatizzato
Il codice nel controllo sorgente ha i numeri di versione per impostazione predefinita (ID SVN o hash Git SHA1) o esplicitamente (tag Git). Anziché aggiornare manualmente le versioni in AssemblyInfo.cs, è possibile utilizzare un processo di compilazione per scrivere la versione dal sistema di controllo del codice sorgente nei file AssemblyInfo.cs e quindi negli assembly.
I pacchetti GitVersionTask o SemVer.Git.Fody NuGet sono esempi di quanto sopra. Per utilizzare GitVersionTask, ad esempio, dopo aver installato il pacchetto nel progetto rimuovere gli attributi di Assembly*Version
dai file AssemblyInfo.cs. Questo mette GitVersionTask a capo della versione degli assembly.
Si noti che il Semantic Versioning è sempre più lo standard di fatto , quindi questi metodi raccomandano l'uso di tag di controllo sorgente che seguono SemVer.
Campi comuni
È buona norma completare i campi predefiniti di AssemblyInfo. Le informazioni possono essere recuperate dagli installatori e verranno visualizzate quando si utilizza Programmi e funzionalità (Windows 10) per disinstallare o modificare un programma.
Il minimo dovrebbe essere:
- AssemblyTitle - solitamente lo spazio dei nomi, ovvero MyCompany.MySolution.MyProject
- AssemblyCompany: il nome completo delle entità legali
- AssemblyProduct - marketing può avere una vista qui
- AssemblyCopyright: tienilo aggiornato perché altrimenti potrebbe sembrare trasandato
'AssemblyTitle' diventa la 'Descrizione file' quando si esamina la scheda Dettagli proprietà della DLL.
[AssemblyConfiguration]
AssemblyConfiguration: l'attributo AssemblyConfiguration deve avere la configurazione utilizzata per creare l'assembly. Utilizzare la compilazione condizionale per includere correttamente diverse configurazioni di assieme. Usa il blocco simile all'esempio qui sotto. Aggiungi tutte le diverse configurazioni che usi di solito.
#if (DEBUG)
[assembly: AssemblyConfiguration("Debug")]
#else
[assembly: AssemblyConfiguration("Release")]
#endif
[InternalsVisibleTo]
Se si desidera rendere internal
classi internal
o le funzioni di un assembly accessibili da un altro assembly, dichiararlo da InternalsVisibleTo
e il nome dell'assembly a cui è consentito l'accesso.
In questo esempio di codice nell'assembly MyAssembly.UnitTests
è consentito chiamare elementi internal
da MyAssembly
.
[assembly: InternalsVisibleTo("MyAssembly.UnitTests")]
Ciò è particolarmente utile per i test unitari per evitare dichiarazioni public
non necessarie.
[AssemblyKeyFile]
Ogni volta che vogliamo installare il nostro assembly in GAC, è necessario avere un nome sicuro. Per un assembly di denominazione forte, dobbiamo creare una chiave pubblica. Per generare il file .snk
.
Per creare un file chiave con nome sicuro
- Prompt dei comandi per sviluppatori per VS2015 (con accesso amministratore)
- Al prompt dei comandi, digitare cd C: \ Directory_Name e premere INVIO.
- Al prompt dei comandi, digitare sn -k KeyFileName.snk e quindi premere INVIO.
una volta che il file keyFileName.snk viene creato nella directory specificata, fornire refernce nel progetto. Assegna a AssemblyKeyFileAttribute
il percorso del file snk
per generare la chiave quando costruiamo la nostra libreria di classi.
Proprietà -> AssemblyInfo.cs
[assembly: AssemblyKeyFile(@"c:\Directory_Name\KeyFileName.snk")]
Thi creerà un assembly con un nome forte dopo la build. Dopo aver creato il tuo assembly nome sicuro, puoi installarlo in GAC
Happy Coding :)