Estoy escribiendo una clase .NET que necesita analizar la línea de comandos del proceso. No quiero tener una dependencia entre el método Main() y esa clase. ¿Cómo puede la clase acceder a la línea de comando?Cómo acceder a los parámetros de línea de comando fuera de Main en C#
Respuesta
Llamada Environment.GetCommandLineArgs()
.
System.Diagnostics.Process.GetCurrentProcess().StartInfo.Arguments
En realidad, esto no parece funcionar. Parece siempre vacío. Consulte http://stackoverflow.com/questions/344056/why-is-startinfo-processstartinfo-always-empty – Carsten
Cree una clase que contenga las opciones de su aplicación. En el método principal, cree una instancia de esa clase, inicialícela con los argumentos de línea de comando y páselo a las clases que lo necesiten.
Como alternativa, puede hacer que la clase se inicialice en cualquier momento posterior al crearla a través de un método CustomConfigClass.Create()
que usa Environment.GetCommandLineArgs()
.
La primera opción es mi recomendación, porque facilita la preparación de la clase para las pruebas unitarias y cambia a un método alternativo de configuración en una fecha posterior sin interrumpir la aplicación debido a una dependencia en la línea de comandos.
La primera opción todavía requiere que el método principal sepa sobre la otra clase, por lo que no resuelve mi problema. Estoy usando un contenedor IOC, por lo tanto, crearé un servicio que exponga la funcionalidad GetCommandLineArgs y haga que mi otro servicio dependa de él. Gracias. –
Sin embargo, me equivoco un poco. Si está utilizando IoC, entonces no tiene un servicio para devolver los argumentos de línea de comando, tiene una interfaz de servicio que devuelve la configuración, y la implementa con una clase que la obtiene desde la línea de comando. De esa forma puedes reemplazar con otra clase para probar la unidad. –
Cadena [] myStr = Environment.GetCommandLineArgs();
siempre es bueno para completar el ejemplo.
Si utiliza .NET Compact Framework, Environment.GetCommandLineArgs() método no se implementa y System.Diagnostics.Process.GetCurrentProcess(). StartInfo.Arguments siempre devuelve una cadena vacía, por lo debe utilizar la función principal y pasa argumentos a tus otras clases.
Un ejemplo:
[MTAThread]
static void Main(String[] commandLineArguments)
{
CommandLineHelper.parse(commandLineArguments);
}
public static class CommandLineHelper
{
public static void parse(String[] commandLineArguments) {
// add your code here
}
}
Gracias por el armazón de Compact Framework. En mi caso, no quería mostrar el formulario principal cuando se especificaron args, para que el exe se ejecutara en modo silencioso, pero como ha sugerido, podría almacenar esos argumentos en la clase estática que estaría disponible para todas las formas del solicitud. Esto debería funcionar en cualquier marco. Para aquellos interesados aquí estaba mi código. [MTAThread] static void Main (String [] cmd) { if (cmd.Length == 0) Application.Run (new frmMain()); else MessageBox.Show (cmd [0]); } – kuklei
- 1. ¿Cómo acceder a argv [] desde fuera de la función main()?
- 2. ¿Cómo acceder a los argumentos de línea de comando pasados a un programa Go?
- 3. .NET C# Aplicación GUI Línea de comando
- 4. Fuera parámetros en C
- 5. Procesar argc y argv fuera de main()
- 6. Parámetros de análisis para main()
- 7. Linux 64 parámetros de línea de comando en el ensamblaje
- 8. Cómo acceder a los parámetros anidados
- 9. Cómo acceder a los parámetros de URL en bootstrap
- 10. Definición de main() en C
- 11. Patrón de comando: cómo pasar parámetros a un comando?
- 12. Pasar parámetros de línea de comando a VB6 IDE en la aplicación de consola
- 13. ¿Cómo leer los argumentos de línea de comando de otro proceso en C#?
- 14. Java: utilizando los parámetros del sistema frente a las opciones de línea de comando "normal"
- 15. ¿Cómo recibir incluso los parámetros de línea de comando más extraños?
- 16. Cómo acceder al elemento hijo fuera de los elementos secundarios()?
- 17. ¿Ejecuta la línea de comandos desde C# con los parámetros?
- 18. Ejecutar el comando de línea de comando interactivo usando C#
- 19. ¿Cómo obtener los argumentos de la línea de comando en aplicaciones mfc?
- 20. ¿Cómo asocio los parámetros a los objetos de comando en ADO con VBScript?
- 21. C++ Win32 API documentación fuera de línea?
- 22. función R para analizar los argumentos de línea de comando
- 23. ¿Cómo regreso de func main en Go?
- 24. xsltproc parámetros de línea de comando utilizando stringparam
- 25. ¿Cómo leer "cadena" del argumento de la línea de comando en C?
- 26. C++ y opciones de línea de comando
- 27. Escribiendo un contenedor de línea de comando portátil en C
- 28. Pasando los parámetros a los informes de cristal en C#
- 29. Parámetros para main con requireJS y data-main
- 30. Cómo acceder a los parámetros de url en las clases de acción Struts 2
GetCommandLineArgs es [seriamente defectuoso] (http://stackoverflow.com/questions/9287812/backslash-and-quote-in-command-line-arguments). Evitar. Difundir la palabra. – Neolisk