attributo di lettura AssemblyTitle in ASP.NET
-
27-10-2019 - |
Domanda
Io uso il codice qui sotto per leggere l'attributo AssemblyTitle di .NET applicazioni, purtroppo Assembly.GetEntryAssembly () restituisce sempre Null in ASP.NET app. Come leggere AssemblyTitle in ASP.NET app?
public static string Title
{
get
{
var attributes = Assembly.GetEntryAssembly().GetCustomAttributes(typeof(AssemblyTitleAttribute), false);
if (attributes.Length > 0)
{
var titleAttribute = (AssemblyTitleAttribute)attributes[0];
if (titleAttribute.Title.Length > 0)
return titleAttribute.Title;
}
return System.IO.Path.GetFileNameWithoutExtension(Assembly.GetEntryAssembly().CodeBase);
}
}
Soluzione
Si deve avere un tipo che si sa è definito nello stesso assembly che contiene il AssemblyTitle
. Poi si può fare:
typeof(MyType).Assembly.GetCustomAttributes
Si noti che (per quanto ne so) non c'è alcun altro metodo di prova di proiettile.
Ad esempio, utilizzando HttpContext.Current
non funziona se si vuole fare, non nel corso di una richiesta Web (così si può fare sulla risposta di un'azione dell'utente, ma non da un thread separato, o da un inizializzatore statico, o da global.asax
)
Alcune letture simili (pieno di mezze successi):
GetEntryAssembly per le applicazioni web
Utilizzando il numero di versione di applicazioni Web da un assembly (ASP.NET/C#)
Altri suggerimenti
Io uso il seguente in asp.net web app:
if (ApplicationDeployment.IsNetworkDeployed)
return ApplicationDeployment.CurrentDeployment.CurrentVersion.ToString();
return System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString();
Modifica: Siamo spiacenti, questo è solo la versione, non il titolo! Ho unito la versione e la mia:
System.Reflection.Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyTitleAttribute), false);
che ottiene l'attributo title assemblaggio bene. La differenza è nel GetExecutingAssembly()
contro vostra GetEntryAssembly()
.