web-dev-qa-db-fra.com

Comment obtenir le nom et la version de l'application EXE dans C # Compact Framework

Mon application a un exe et utilise des DLL. J'écris tout en C #.

Dans un DLL je veux écrire une méthode pour obtenir le nom et la version de l'application à partir des informations de version dans l'exe.

Je comprends qu'en intégralité .NET, je pourrais utiliser GetEntryAssembly, mais que cela n'est pas disponible dans CF.

25
cja

Obtenir le nom de l'application:

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

Obtenir la version:

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

Vous voudrez peut-être utiliser GetCallingAssembly() ou obtenir l'assembly par type (par exemple typeof(Program).Assembly) si votre DLL essaie d'obtenir la version EXE et que vous ne n'y ai pas accès immédiatement.

MODIFIER

Si vous avez un DLL et vous avez besoin du nom de l'exécutable, vous avez quelques options, selon le cas d'utilisation. Vous pouvez obtenir l'assembly à partir d'un type contenu dans l'assembly EXE, mais depuis il serait rare que le DLL pour référencer l'EXE, il nécessite le passage EXE dans un objet de ce type.

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

Vous pouvez également faire un petit bout comme ceci:

[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;

Cette fonction donnera la version de l'application à partir de laquelle les autres bibliothèques sont chargées.

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

Cela donnera la version de la bibliothèque actuelle. Si vous appelez cela dans la bibliothèque d'applications, vous obtiendrez la version de l'application et si vous l'appelez dans une version DLL, vous obtiendrez cette version DLL.

Donc, à mon avis, System.Reflection.Assembly.GetEntryAssembly().GetName().Version; est une fonction courante à utiliser.

17
Rohan S D

Si vous souhaitez créer un composant (.dll) à utiliser dans une autre référence d'application pour récupérer le nom et la version de l'application principale, vous pouvez utiliser cette méthode:

Obtenir le nom de l'application principale:

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

Obtenir la version:

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

Obtenir le nom complet (contient: nom de l'application, version de l'application, culture, publicKeyToken):

AppDomain.CurrentDomain.DomainManager.EntryAssembly.FullName;

Mais dans cette solution, il y a un problème, celui-ci, qui dépend de l'hôte et s'il s'exécute directement à partir du fichier exécutable, l'erreur se produira. Par conséquent, les élections suivantes:

Obtenir le nom de l'application principale:

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

Obtenir la version:

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