Como obter o nome e a versão da aplicação exe em C# Compact Framework

a minha aplicação tem um exe e usa alguns DLLs. Estou a escrever tudo em C#.

em um DLL quero escrever um método para obter o nome da aplicação e a versão da Informação da versão no exe.

Eu entendo que na íntegra. net eu poderia usar Getentry Assembly, mas que isso não está disponível em CF.

Author: cja, 2013-02-12

4 answers

Obtendo o nome da aplicação:

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

Obtendo a versão:

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

Você pode querer usar GetCallingAssembly() ou obter a montagem por tipo (por exemplo typeof(Program).Assembly) Se o seu DLL estiver a tentar obter a versão EXE e não tiver acesso imediato a ela.

EDITAR

Se você tem um DLL e você precisa do nome do executável você tem algumas opções, dependendo do caso de uso. Você pode obter a montagem de um tipo contido na montagem EXE, mas uma vez que seria raro para que o DLL faça referência ao EXE, ele requer o passe EXE em um objeto desse tipo.

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

Você também poderia fazer um pouco de um final como este:

[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;
 52
Author: ctacke, 2013-10-24 19:07:22

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

Esta função irá dar a versão da aplicação de onde as outras bibliotecas são carregadas.

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

Isto dará a versão da biblioteca actual. Se você chamar isso na biblioteca de aplicativos você vai obter a versão de aplicação e se chamar isso em um DLL, então vai obter essa versão DLL.

Então, na minha opinião ... é função currect para usar.
 15
Author: Rohan S D, 2015-04-10 09:15:31

Se quiser criar um componente (.dll) use em outra referência da aplicação para obter o nome e a versão principais da aplicação, você pode usar desta forma:

Obtendo o nome principal da aplicação:

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

Obtendo a versão:

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

Obter o nome completo (conter: nome da aplicação, versão da aplicação, cultura, publickeyoken):

AppDomain.CurrentDomain.DomainManager.EntryAssembly.FullName;

Mas nesta solução há um problema, isto é, depende da máquina e se correr directamente do ficheiro executável, o erro irá ocorrer. Portanto, as seguintes eleições:

Obtendo o nome principal da aplicação:

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

Obtendo a versão:

System.Windows.Forms.Application.ProductVersion;
 2
Author: Behzad, 2014-11-04 09:22:05

Pode tentar usar FileInfo Classe FileVersionInfo. Espero que isto ajude..

Você também pode tentar a API Win32 como GetModuleFile ()

 -2
Author: Rajesh Subramanian, 2013-02-12 10:05:01