次のコードを使用して、C#3.0で実行中のアセンブリバージョンを取得しようとしています。
var assemblyFullName = Assembly.GetExecutingAssembly().FullName;
var version = assemblyFullName .Split(',')[1].Split('=')[1];
そうする別の適切な方法はありますか?
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
をきれいに参照できます。
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つのタイプを知っている場合、ヘルパークラスを作成することは必須ではなく、時間を節約します。
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();
最終的に、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
GitVersionまたは他のバージョン管理ソフトウェアを介してバージョン管理を使用している場合は、Product Version
が推奨される場合があります。
これをクラスライブラリ内から取得するには、 System.Diagnostics.FileVersionInfo.ProductVersion
を呼び出します。
using System.Diagnostics;
using System.Reflection;
//...
var assemblyLocation = Assembly.GetExecutingAssembly().Location;
var productVersion = FileVersionInfo.GetVersionInfo(assemblyLocation).ProductVersion