web-dev-qa-db-ja.com

実行中のアセンブリバージョンを取得するにはどうすればよいですか?

次のコードを使用して、C#3.0で実行中のアセンブリバージョンを取得しようとしています。

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

そうする別の適切な方法はありますか?

160
user1

2つのオプション...アプリケーションの種類に関係なく、常に呼び出すことができます。

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をきれいに参照できます。

276
Chris Baxter

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

もちろん、これはヘルパークラス「public static class CoreAssembly」での回答に非常に似ていますが、アセンブリの実行の少なくとも1つのタイプを知っている場合、ヘルパークラスを作成することは必須ではなく、時間を節約します。

34
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が返されます。これは、プロセスのエントリポイントが管理されたアセンブリよりも。

18
Hammad Qureshi

これはする必要があります:

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

最終的に、netstandard1.6アプリのtypeof(MyClass).GetTypeInfo().Assembly.GetName().Versionに決めました。他の提案された回答はすべて、部分的な解決策を提示しました。これは、まさに私が必要としたものを私にもたらした唯一のものです。

場所の組み合わせから供給:

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

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

1
Victor Ude

GitVersionまたは他のバージョン管理ソフトウェアを介してバージョン管理を使用している場合は、Product Versionが推奨される場合があります。

これをクラスライブラリ内から取得するには、 System.Diagnostics.FileVersionInfo.ProductVersion を呼び出します。

using System.Diagnostics;
using System.Reflection;

//...

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

enter image description here

1
Daniel