私のアプリケーションにはexeがあり、いくつかのDLLを使用しています。私はすべてC#で書いています。
1つでDLL exeのバージョン情報からアプリケーション名とバージョンを取得するメソッドを記述したいと思います。
完全な.NETではGetEntryAssemblyを使用できることを理解していますが、CFでは使用できません。
アプリ名の取得:
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;
System.Reflection.Assembly.GetEntryAssembly().GetName().Version;
この関数は、他のライブラリがロードされるアプリケーションのバージョンを提供します。
System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;
これにより、現在のライブラリのバージョンが提供されます。これをアプリケーションライブラリで呼び出すと、アプリケーションバージョンが取得され、これをDLLで呼び出すと、DLLバージョン。
私の意見では、System.Reflection.Assembly.GetEntryAssembly().GetName().Version;
は使用する正しい関数です。
メインアプリの名前とバージョンを取得するために別のアプリ参照で使用するコンポーネント(.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;