我试图在c# 3.0中使用以下代码获得执行程序集版本:

var assemblyFullName = Assembly.GetExecutingAssembly().FullName;
var version = assemblyFullName .Split(',')[1].Split('=')[1];

还有其他合适的方式吗?


当前回答

如果您通过GitVersion或其他版本控制软件使用版本控制,则产品版本可能是首选。

你可以调用System.Diagnostics.FileVersionInfo.ProductVersion:

using System.Diagnostics;
using System.Reflection;

//...

var assemblyLocation = Assembly.GetExecutingAssembly().Location;
var productVersion = FileVersionInfo.GetVersionInfo(assemblyLocation).ProductVersion

其他回答

using System.Reflection;
{
    string version = Assembly.GetEntryAssembly().GetName().Version.ToString();
}

来自MSDN http://msdn.microsoft.com/en-us/library/system.reflection.assembly.getentryassembly%28v=vs.110%29.aspx:的评论

当托管程序集从非托管应用程序加载时,GetEntryAssembly方法可以返回null。例如,如果非托管应用程序创建了一个用c#编写的COM组件实例,则从c#组件调用GetEntryAssembly方法将返回null,因为该流程的入口点是非托管代码,而不是托管程序集。

这应该是:

Assembly assem = Assembly.GetExecutingAssembly();
AssemblyName aName = assem.GetName();
return aName.Version.ToString();

如果您通过GitVersion或其他版本控制软件使用版本控制,则产品版本可能是首选。

你可以调用System.Diagnostics.FileVersionInfo.ProductVersion:

using System.Diagnostics;
using System.Reflection;

//...

var assemblyLocation = Assembly.GetExecutingAssembly().Location;
var productVersion = FileVersionInfo.GetVersionInfo(assemblyLocation).ProductVersion

两个选项…无论应用程序类型如何,您都可以调用:

Assembly.GetExecutingAssembly().GetName().Version

如果是一个Windows窗体应用程序,你总是可以通过应用程序访问,如果特别寻找产品版本。

Application.ProductVersion

对程序集引用使用GetExecutingAssembly并不总是一个选项。因此,我个人认为在需要引用底层程序集或程序集版本的项目中创建静态helper类很有用:

// 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。版本在我的代码要求。

我最终确定typeof(MyClass). gettypeinfo (). assembly . getname()。所有其他提出的答案都给出了部分解决方案。这是唯一能让我得到我想要的东西。

来自多个地方的组合:

https://msdn.microsoft.com/en-us/library/x4cw969y (v = vs.110) . aspx

https://msdn.microsoft.com/en-us/library/2exyydhb (v = vs.110) . aspx