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


169

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

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

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

回答:


293

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

Assembly.GetExecutingAssembly().GetName().Version

Windowsフォームアプリケーションの場合、特に製品のバージョンを探す場合は、アプリケーションを介していつでもアクセスできます。

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、必要に応じてコード内をきれいに参照できます。


7
それはClickOnceので展開しています場合は、チェックする必要がありますSystem.Deployment.Application.ApplicationDeployment.CurrentDeployment.CurrentVersion
ジャスティン・モーガン

何が面白いでしょう:実際のバージョンをどこに指定する必要がありますか?私は私のAssemblyInfo.csでのAssemblyVersionとAssemblyFileVersionを指定して、私はabovemethod呼び出しから取得するすべてがある:0.0.0.0 1.0.0指定したにもかかわらず
AgentKnopf

@Zainodis @JustinでClickOnce言及されているバージョンを参照している場合はPublish、プロジェクトのプロパティ内のタブで指定されています(つまり、AssemblyVersionまたはAssemblyFileVersionとは関係ありません)。
Chris Baxter 2013年

@CalgaryCoderの応答に感謝します。ClickOnceが何であるかわかりませんが、VSを介してAssemblyInfoファイルを編集すると、突然oOが機能しました。テキストエディターでAssemblyInfo.casを手動で編集すると、すべてのフィールドが空になります。いずれにせよ、それは今解決されます:)
AgentKnopf 2013年

7
起動コンテキストのため、これはASP.NET MVCアプリでは機能しないことに言及する価値があります。この問題を回避するには、ユビキタスMVCを例えば、アセンブリウェブサイトで知られているタイプを参照することですHomeControllerので、カミソリで、:v@(Assembly.GetAssembly(typeof(MyWebProject.Mvc.Controllers.HomeController)).GetName().Version.ToString(2))
ジェームズ・マコーマック

38

MSDNでは、Assembly.GetExecutingAssemblyメソッド、メソッド「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つのタイプの実行アセンブリがわかっている場合は、ヘルパークラスを作成する必要はなく、時間を節約できます。


19
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コンポーネントのインスタンスを作成する場合、プロセスのエントリポイントはマネージアセンブリではなくアンマネージコードであるため、GetEntryAssemblyC#コンポーネントからのメソッドの呼び出しはを返しますnull


2
+1。GetEntryAssembly(vs GetCallingAssemblyまたはGetExecutingAssembly)は、参照ライブラリ内から呼び出されたときに機能する唯一のもののようです。
drzaus

6

これは行う必要があります:

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

5
この3行は1になる可能性があります:Assembly.GetExecutingAssembly()。GetName()。Version.ToString();を返します。.............
アレクサンドル

1

ようやく落ち着きました typeof(MyClass).GetTypeInfo().Assembly.GetName().Version netstandard1.6アプリ。他のすべての提案された回答は部分的な解決策を提示しました。これが私が必要とするものを正確に私に与えた唯一のものです。

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

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

Product Version GitVersionまたは他のバージョン管理ソフトウェアを介してバージョン管理を使用している場合は、こちらをお勧めします。

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

using System.Diagnostics;
using System.Reflection;

//...

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

ここに画像の説明を入力してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.