c# fileversioninfo

¿Cómo obtengo el nombre.exe de una aplicación de consola C#?



fileversioninfo (9)

Dependiendo de la información que desee, puede usar una variedad de llamadas:

Estoy depurando "xiixtasks.exe", una aplicación de modo de consola de C # en VS2008.

Estoy tratando de obtener la información de la versión de xiixtasks.exe.

Cuando intento "Process.GetCurrentProcess ()", me da el nombre del archivo y la información de la versión de vshost.exe, NO xiixtasks.exe:

// WRONG: this gives me xiixtasks.vhost.exe, version 9.0.30729.1 // I *want* "xiixtasks.exe", version 1.0.0.1024 System.Diagnostics.FileVersionInfo fi = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileVersionInfo;

¿Qué debería estar haciendo en su lugar?

¡Gracias de antemano!

================================================== ====

Solución:

1) El problema inicial fue de hecho el contenedor "vshost" del IDE. Una solución podría haber sido cambiar la configuración de compilación.

2) Assembly.GetExecutingAssembly (). CodeBase es una solución excelente , ¡gracias! Funciona dentro y fuera del depurador.

3) Desafortunadamente, cuando intenté llamarlo con una función que esperaba una ruta de archivo normal (en lugar de una URI como GetExecutingAssembly () "le da), murió con una excepción" Los formatos Uri no son compatibles ".

4) Solución final: llame a GetExecutingAssembly (), luego Uri.LocalPath ():

... else if (cmdArgs.cmd.Equals(CmdOptions.CMD_SHOW_VERSION)) { string codeBaseUri = Urifile.System.Reflection.Assembly.GetExecutingAssembly().CodeBase; string codeBase = new Uri (codeBaseUri).LocalPath; string sVersion = Util.GetWindowsVersion(codeBase); System.Console.WriteLine ("version({0}): {1}: ", Util.Basename(codeBase), sVersion); }

¡Gracias una vez más, todos!


El envoltorio ''vshost.exe'' generalmente solo está habilitado para compilaciones de depuración, y tampoco es necesario usarlo, por lo que quizás debería considerar desactivarlo en la configuración de su proyecto (pestaña Depurar, desmarque ''Habilitar el proceso de alojamiento de Visual Studio'' en el fondo).


Eso es realmente lo que esperaría ya que, de hecho, se ejecuta el archivo vshost en modo de depuración.

Si no desea que ejecute el archivo vshost sino su archivo exe directamente, debe ingresar a la configuración de su proyecto y deshabilitar la opción de depuración vshost.


Esto también le dará nombre / versión

name: Assembly.GetExecutingAssembly().GetName().Name version: = Assembly.GetExecutingAssembly().GetName().Version


Intenta esto para obtener la versión:

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

Y esto para conseguir el nombre:

System.Reflection.Assembly.GetExecutingAssembly().GetName().ToString()


Parece que se está ejecutando dentro del IDE en la depuración con la casilla de verificación "Habilitar el proceso de alojamiento de Visual Studio" habilitada. En cuyo caso, el proceso actual es xiixtasks.vshost.exe , es un exe de shell que se usa para ayudar a la depuración. Necesitas deshabilitar esa casilla de verificación.


Ruta completa de su asamblea:

Assembly.GetExecutingAssembly().CodeBase.Dump();

Siempre puedes extraer el nombre con Path.GetFileName :

string codeBase = Assembly.GetExecutingAssembly().CodeBase; string name = Path.GetFileName(codeBase);


Si obtiene la excepción como "No se admite el formato URI" al copiar el archivo xml de un directorio a otro, utilice el siguiente código.

string path=System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase); DirectoryInfo dir=new DirectoryInfo(path+"//App2"); FileInfo[] Files=dir.GetFiles();

luego convertirlo en el URI como.

string path =Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase); URI uri = new URI(path); string FileName = Path.Combine(uri.LocalPath, "//App2"+file.Name);

luego úselo para obtener los archivos.


tratar

var asm = Assembly.GetExecutingAssembly();