Answers:
两个选项...无论您使用哪种应用程序类型,都可以随时调用:
Assembly.GetExecutingAssembly().GetName().Version
如果是Windows Forms应用程序,则在专门查找产品版本时始终可以通过应用程序访问。
Application.ProductVersion
使用GetExecutingAssembly
程序集的引用并不总是一个选项。因此,我个人认为在可能需要引用基础程序集或程序集版本的项目中创建静态帮助器类很有用:
// 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;
}
然后,我可以CoreAssembly.Version
根据需要在我的代码中干净引用。
ClickOnce
是@Justin提到的版本,则Publish
在项目属性中的选项卡上指定该版本(即,与AssemblyVersion或AssemblyFileVersion不相关)。
HomeController
,因此在Razor中:v@(Assembly.GetAssembly(typeof(MyWebProject.Mvc.Controllers.HomeController)).GetName().Version.ToString(2))
在MSDN中,Assembly.GetExecutingAssembly Method表示方法“ getexecutingassembly”,出于性能原因,仅当在设计时不知道当前正在执行什么程序集时才应调用此方法。
检索表示当前程序集的Assembly对象的推荐方法是使用Type.Assembly
在程序集中找到的类型的属性。
以下示例说明:
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
当然,这与帮助程序类“公共静态类CoreAssembly”的答案非常相似,但是,如果您知道至少一种执行程序集的类型,则不必强制创建帮助程序类,这样可以节省时间。
using System.Reflection;
{
string version = Assembly.GetEntryAssembly().GetName().Version.ToString();
}
当从非托管应用程序加载托管程序集时,该GetEntryAssembly
方法可以返回null
。例如,如果非托管应用程序创建了用C#编写的COM组件的实例,GetEntryAssembly
则C#组件对方法的调用返回null
,因为该过程的入口点是非托管代码而不是托管程序集。
GetEntryAssembly
(vs GetCallingAssembly
或GetExecutingAssembly
)似乎是唯一起作用的东西。
应该这样做:
Assembly assem = Assembly.GetExecutingAssembly();
AssemblyName aName = assem.GetName();
return aName.Version.ToString();
我终于typeof(MyClass).GetTypeInfo().Assembly.GetName().Version
选择了netstandard1.6应用程序。所有其他提出的答案都提供了部分解决方案。这是唯一让我真正需要的东西。
来自多个地方的组合:
https://msdn.microsoft.com/zh-CN/library/x4cw969y(v=vs.110).aspx
https://msdn.microsoft.com/zh-CN/library/2exyydhb(v=vs.110).aspx
Product Version
如果您通过GitVersion或其他版本控制软件使用版本控制,则可能是首选。
要从您的类库中获取此信息,可以调用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