web-dev-qa-db-ja.com

C#Compact Frameworkでexeアプリケーションの名前とバージョンを取得する方法

私のアプリケーションにはexeがあり、いくつかのDLLを使用しています。私はすべてC#で書いています。

1つでDLL exeのバージョン情報からアプリケーション名とバージョンを取得するメソッドを記述したいと思います。

完全な.NETではGetEntryAssemblyを使用できることを理解していますが、CFでは使用できません。

25
cja

アプリ名の取得:

System.Reflection.Assembly.GetExecutingAssembly().GetName().Name;

バージョンの取得:

System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;

DLLがEXEバージョンを取得しようとしていて、すぐに実行できない場合は、GetCallingAssembly()を使用するか、タイプごとにアセンブリを取得する必要があります(例:typeof(Program).Assembly))それへのアクセス。

[〜#〜] edit [〜#〜]

DLLがあり、実行可能ファイルの名前が必要な場合は、ユースケースに応じていくつかのオプションがあります。EXEアセンブリに含まれるタイプからアセンブリを取得できますが、 DLLがEXEを参照することはまれです。そのタイプのオブジェクトにEXEパスを渡す必要があります。

Version GetAssemblyVersionFromObjectType(object o)
{
    o.GetType().Assembly.GetName().Version;
}

また、次のようなエンドランを少し行うこともできます。

[DllImport("coredll.dll", SetLastError = true)]
private static extern int GetModuleFileName(IntPtr hModule, StringBuilder lpFilename, int nSize);

...

var name = new StringBuilder(1024);
GetModuleFileName(IntPtr.Zero, name, 1024);
var version = Assembly.LoadFrom(name.ToString()).GetName().Version;
64
ctacke

System.Reflection.Assembly.GetEntryAssembly().GetName().Version;

この関数は、他のライブラリがロードされるアプリケーションのバージョンを提供します。

System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;

これにより、現在のライブラリのバージョンが提供されます。これをアプリケーションライブラリで呼び出すと、アプリケーションバージョンが取得され、これをDLLで呼び出すと、DLLバージョン。

私の意見では、System.Reflection.Assembly.GetEntryAssembly().GetName().Version;は使用する正しい関数です。

17
Rohan S D

メインアプリの名前とバージョンを取得するために別のアプリ参照で使用するコンポーネント(.dll)を作成する場合は、次の方法を使用できます。

メインアプリ名の取得:

AppDomain.CurrentDomain.DomainManager.EntryAssembly.GetName().Name;

バージョンの取得:

AppDomain.CurrentDomain.DomainManager.EntryAssembly.GetName().Version.ToString();    

FullNameの取得(含む:アプリ名、アプリバージョン、カルチャ、publicKeyToken):

AppDomain.CurrentDomain.DomainManager.EntryAssembly.FullName;

しかし、このソリューションには、ホストに依存する問題があり、実行可能ファイルから直接実行すると、エラーが発生します。したがって、次の選挙:

メインアプリ名の取得:

string appName = AppDomain.CurrentDomain.FriendlyName;
appName = appName.Substring(0, appName.IndexOf('.'));

バージョンの取得:

System.Windows.Forms.Application.ProductVersion;
4
Behzad