2008-11-17 12 views

Respuesta

7

estoy usando un script por ahora, pero me gustaría saber si hay un método de pre-compilados ya disponibles. Muchas gracias a Sundar por el truco de ForegroundColor.

No estoy seguro si importa si usa Project.Log o vaya directo a Console.WriteLine(), cualquier ninja de NAnt quiere educarme?

Aquí está el guión y un blanco de muestra que lo utiliza:

<target name="input"> 
    <script language="C#" prefix="password" > 
     <code><![CDATA[ 
      [Function("ask")] 
      public string AskPassword(string prompt) { 
       Project.Log(Level.Info, prompt); 
       ConsoleColor oldColor = Console.ForegroundColor; 
       Console.ForegroundColor = Console.BackgroundColor; 
       try 
       { 
        return Console.ReadLine(); 
       } 
       finally 
       { 
        Console.ForegroundColor = oldColor; 
       } 
      } 
     ]]></code> 
    </script> 

    <echo message="Password is ${password::ask('What is the password?')}"/> 
</target> 
6

Una solución que he usado muchas veces es tener un local archivo de configuración que contiene cosas tales como contraseñas, cadenas de conexión, etc. que son específicas de cada desarrollador. El script de compilación NAnt incluirá estas configuraciones al compilar.

El archivo de configuración local no existe en el sistema de control de versiones, por lo que las contraseñas no se exponen. La primera vez que un desarrollador comprueba una base de código e intenta crearla, debe crear este archivo de configuración. Para hacerlo más fácil, podría haber un archivo de plantilla disponible como my.config.template que contenga todas las propiedades que se pueden personalizar.

+0

que consideró que, pero parece más trabajo de lo necesario para cada desarrollador. Si termino con varias configuraciones, podría cambiar a eso. –

+0

Esto es algo que solo tendrás que hacer una vez cuando construyas por primera vez. Preferiría que en vez de tener que ingresar una contraseña cada vez que quiera construir. –

4

Prueba esto:

<script language="C#" prefix="test" > 
      <code> 
      <![CDATA[ 
       [Function("get-password")] 
       public static string GetPassword() { 
        Console.WriteLine("Please enter the password"); 
        ConsoleColor oldForegroundColor = Console.ForegroundColor;   
      Console.ForegroundColor = Console.BackgroundColor; 
        string password = Console.ReadLine(); 
      Console.ForegroundColor = oldForegroundColor; 
     return password; 
       } 
      ]]> 
      </code> 
</script> 

<target name="test.password"> 
<echo message='${test::get-password()}'/> 
</target> 

--> 
+0

Estaba experimentando con algo similar, ¡pero cambiar el ForegroundColor es una gran idea! –

3

Esto muestra asteriscos a medida que escribe la contraseña:

<code><![CDATA[ 
     [Function("ask")] 
     public string AskPassword(string prompt) { 
      Project.Log(Level.Info, prompt); 
      string password = ""; 

      // get the first character of the password 
      ConsoleKeyInfo nextKey = Console.ReadKey(true); 

      while (nextKey.Key != ConsoleKey.Enter) 
      { 
       if (nextKey.Key == ConsoleKey.Backspace) 
       { 
        if (password.Length > 0) 
        { 
         password = password.Substring(0, password.Length - 1); 

         // erase the last * as well 
         Console.Write(nextKey.KeyChar); 
         Console.Write(" "); 
         Console.Write(nextKey.KeyChar); 
        } 
       } 
       else 
       { 
        password += nextKey.KeyChar; 
        Console.Write("*"); 
       } 

       nextKey = Console.ReadKey(true); 
      } 

      Console.WriteLine(); 

      return password; 
     } 
    ]]></code> 
Cuestiones relacionadas