2008-11-17 5 views

Répondre

7

J'utilise un script pour l'instant, mais j'aimerais entendre s'il y a une méthode préconstruits déjà disponible. Un grand merci à Sundar pour l'astuce ForegroundColor.

Je ne sais pas si cela importe si vous utilisez Project.Log ou allez directement à Console.WriteLine(), les ninjas NAnt veulent me renseigner?

est ici le script et une cible de l'échantillon qui l'utilise:

<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

Une solution que j'ai utilisée plusieurs fois est d'avoir un fichier de configuration local contenant des mots de passe, des chaînes de connexion, etc. spécifiques à chaque développeur. Le script de construction NAnt inclura ces paramètres lors de la construction.

Le fichier de configuration local n'existe pas dans le système de contrôle de version, de sorte que les mots de passe ne sont pas affichés. La première fois qu'un développeur vérifie une base de code et essaie de construire, il doit créer ce fichier de configuration. Pour le rendre facile pour lui, il pourrait y avoir un fichier modèle disponible tel que my.config.template contenant toutes les propriétés qui peuvent être personnalisées.

+0

Je considère que, mais il semble plus de travail que nécessaire pour chaque développeur. Si je me retrouve avec plusieurs paramètres, je pourrais passer à cela. –

+0

C'est quelque chose que vous n'aurez à faire qu'une fois lors de la construction pour la première fois. Je préférerais certainement cela au lieu d'avoir à entrer un mot de passe chaque fois que je veux construire. –

4

Essayez ceci:

<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

J'expérimentais quelque chose de similaire, mais changer ForegroundColor est une bonne idée! –

3

Cette affiche astérisques que vous tapez le mot de passe:

<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> 
Questions connexes