Zwei Optionen ... unabhängig vom Anwendungstyp, den Sie jederzeit aufrufen können:
Assembly.GetExecutingAssembly().GetName().Version
Wenn es sich um eine Windows Forms- Anwendung handelt, können Sie jederzeit über eine Anwendung darauf zugreifen, wenn Sie speziell nach einer Produktversion suchen.
Application.ProductVersion
Die Verwendung GetExecutingAssembly
für eine Baugruppenreferenz ist nicht immer eine Option. Daher finde ich es persönlich nützlich, eine statische Hilfsklasse in Projekten zu erstellen, in denen ich möglicherweise auf die zugrunde liegende Assembly oder Assembly-Version verweisen muss:
// 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;
}
Dann kann ich CoreAssembly.Version
in meinem Code nach Bedarf sauber referenzieren .
System.Deployment.Application.ApplicationDeployment.CurrentDeployment.CurrentVersion
ClickOnce
von @Justin erwähnte Version beziehen, wird diese auf derPublish
Registerkarte in den Projekteigenschaften angegeben (dh nicht in Bezug auf AssemblyVersion oder AssemblyFileVersion).HomeController
, also in Razor:v@(Assembly.GetAssembly(typeof(MyWebProject.Mvc.Controllers.HomeController)).GetName().Version.ToString(2))
In MSDN enthält Assembly.GetExecutingAssembly-Methode eine Bemerkung zur Methode "getexecutingassembly". Aus Leistungsgründen sollten Sie diese Methode nur aufrufen, wenn Sie zur Entwurfszeit nicht wissen, welche Assembly derzeit ausgeführt wird.
Die empfohlene Methode zum Abrufen eines Assembly-Objekts, das die aktuelle Assembly darstellt, besteht darin, die
Type.Assembly
Eigenschaft eines in der Assembly gefundenen Typs zu verwenden .Das folgende Beispiel zeigt:
Dies ist natürlich der Antwort mit der Hilfsklasse "public static class CoreAssembly" sehr ähnlich, aber wenn Sie mindestens einen Typ der ausführenden Assembly kennen, ist es nicht zwingend erforderlich, eine Hilfsklasse zu erstellen, und dies spart Zeit.
quelle
Anmerkungen von MSDN http://msdn.microsoft.com/en-us/library/system.reflection.assembly.getentryassembly%28v=vs.110%29.aspx :
Die
GetEntryAssembly
Methode kann zurückkehren,null
wenn eine verwaltete Assembly aus einer nicht verwalteten Anwendung geladen wurde. Wenn eine nicht verwaltete Anwendung beispielsweise eine Instanz einer in C # geschriebenen COM-Komponente erstellt, wird ein Aufruf derGetEntryAssembly
Methode von der C # -Komponente zurückgegebennull
, da der Einstiegspunkt für den Prozess nicht verwalteter Code und keine verwaltete Assembly war.quelle
GetEntryAssembly
(vsGetCallingAssembly
oderGetExecutingAssembly
) scheint das einzige zu sein, was funktioniert, wenn es aus einer Referenzbibliothek heraus aufgerufen wird.Dies sollte tun:
quelle
Ich habe mich schließlich
typeof(MyClass).GetTypeInfo().Assembly.GetName().Version
für eine netstandard1.6 App entschieden. Alle anderen vorgeschlagenen Antworten stellten eine Teillösung dar. Dies ist das einzige, was mir genau das gebracht hat, was ich brauchte.Aus einer Kombination von Orten bezogen:
https://msdn.microsoft.com/en-us/library/x4cw969y(v=vs.110).aspx
https://msdn.microsoft.com/en-us/library/2exyydhb(v=vs.110).aspx
quelle
Product Version
kann bevorzugt werden, wenn Sie die Versionierung über GitVersion oder eine andere Versionierungssoftware verwenden.Um dies aus Ihrer Klassenbibliothek herauszuholen, können Sie anrufen
System.Diagnostics.FileVersionInfo.ProductVersion
:quelle