Antworten:
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 .
ClickOnce
von @Justin erwähnte Version beziehen, wird diese auf der Publish
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:
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
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.
using System.Reflection;
{
string version = Assembly.GetEntryAssembly().GetName().Version.ToString();
}
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 der GetEntryAssembly
Methode von der C # -Komponente zurückgegeben null
, da der Einstiegspunkt für den Prozess nicht verwalteter Code und keine verwaltete Assembly war.
GetEntryAssembly
(vs GetCallingAssembly
oder GetExecutingAssembly
) scheint das einzige zu sein, was funktioniert, wenn es aus einer Referenzbibliothek heraus aufgerufen wird.
Dies sollte tun:
Assembly assem = Assembly.GetExecutingAssembly();
AssemblyName aName = assem.GetName();
return aName.Version.ToString();
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
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
:
using System.Diagnostics;
using System.Reflection;
//...
var assemblyLocation = Assembly.GetExecutingAssembly().Location;
var productVersion = FileVersionInfo.GetVersionInfo(assemblyLocation).ProductVersion
System.Deployment.Application.ApplicationDeployment.CurrentDeployment.CurrentVersion