Risposte:
Due opzioni ... indipendentemente dal tipo di applicazione che puoi sempre invocare:
Assembly.GetExecutingAssembly().GetName().Version
Se un'applicazione Windows Form , puoi sempre accedere tramite l'applicazione se cerchi specificamente la versione del prodotto.
Application.ProductVersion
L'uso GetExecutingAssembly
per un riferimento di assieme non è sempre un'opzione. Pertanto, trovo personalmente utile creare una classe di supporto statica in progetti in cui potrebbe essere necessario fare riferimento all'assembly o alla versione dell'assembly sottostante:
// A sample assembly reference class that would exist in the `Core` project.
public static class CoreAssembly
{
public static readonly Assembly Reference = typeof(CoreAssembly).Assembly;
public static readonly Version Version = Reference.GetName().Version;
}
Quindi posso fare chiarezza CoreAssembly.Version
nel mio codice come richiesto.
ClickOnce
versione menzionata da @Justin, è specificata nella Publish
scheda all'interno delle proprietà del progetto (cioè non correlata a AssemblyVersion o AssemblyFileVersion).
HomeController
, quindi in Razor:v@(Assembly.GetAssembly(typeof(MyWebProject.Mvc.Controllers.HomeController)).GetName().Version.ToString(2))
In MSDN, il metodo Assembly.GetExecutingAssembly è un'osservazione sul metodo "getexecutingassembly", che per motivi di prestazioni, è necessario chiamare questo metodo solo quando non si conosce in fase di progettazione quale assembly è attualmente in esecuzione.
Il modo consigliato per recuperare un oggetto Assembly che rappresenta l'assembly corrente è utilizzare la Type.Assembly
proprietà di un tipo trovato nell'assembly.
L'esempio seguente mostra:
using System;
using System.Reflection;
public class Example
{
public static void Main()
{
Console.WriteLine("The version of the currently executing assembly is: {0}",
typeof(Example).Assembly.GetName().Version);
}
}
/* This example produces output similar to the following:
The version of the currently executing assembly is: 1.1.0.0
Naturalmente questo è molto simile alla risposta con la classe helper "CoreAssembly di classe statica pubblica", ma, se si conosce almeno un tipo di assembly in esecuzione, non è obbligatorio creare una classe helper e fa risparmiare tempo.
using System.Reflection;
{
string version = Assembly.GetEntryAssembly().GetName().Version.ToString();
}
Commenti da MSDN http://msdn.microsoft.com/en-us/library/system.reflection.assembly.getentryassembly%28v=vs.110%29.aspx :
Il GetEntryAssembly
metodo può essere restituito null
quando un assembly gestito è stato caricato da un'applicazione non gestita. Ad esempio, se un'applicazione non gestita crea un'istanza di un componente COM scritto in C #, viene GetEntryAssembly
restituita una chiamata al metodo dal componente C # null
, poiché il punto di ingresso per il processo era codice non gestito anziché un assembly gestito.
GetEntryAssembly
(vs GetCallingAssembly
o GetExecutingAssembly
) sembra essere l'unica cosa che funziona quando viene chiamato da una libreria di riferimento.
Questo dovrebbe fare:
Assembly assem = Assembly.GetExecutingAssembly();
AssemblyName aName = assem.GetName();
return aName.Version.ToString();
typeof(MyClass).GetTypeInfo().Assembly.GetName().Version
Alla fine ho optato per un'app netstandard1.6. Tutte le altre risposte proposte hanno presentato una soluzione parziale. Questa è l'unica cosa che mi ha procurato esattamente ciò di cui avevo bisogno.
Provenienti da una combinazione di luoghi:
https://msdn.microsoft.com/en-us/library/x4cw969y(v=vs.110).aspx
https://msdn.microsoft.com/en-us/library/2exyydhb(v=vs.110).aspx
Product Version
può essere preferito se si utilizza il controllo delle versioni tramite GitVersion o altri software di controllo delle versioni.
Per ottenerlo dall'interno della tua biblioteca di classe puoi chiamare System.Diagnostics.FileVersionInfo.ProductVersion
:
using System.Diagnostics;
using System.Reflection;
//...
var assemblyLocation = Assembly.GetExecutingAssembly().Location;
var productVersion = FileVersionInfo.GetVersionInfo(assemblyLocation).ProductVersion
System.Deployment.Application.ApplicationDeployment.CurrentDeployment.CurrentVersion