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 GetExecutingAssemblyper 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.Versionnel mio codice come richiesto.
ClickOnceversione menzionata da @Justin, è specificata nella Publishscheda 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.Assemblyproprietà 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 GetEntryAssemblymetodo può essere restituito nullquando 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 GetEntryAssemblyrestituita 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 GetCallingAssemblyo 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().VersionAlla 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