有没有办法在NAnt构建期间提示用户输入?我想执行一个获取密码的命令,但我不想将密码放入构建脚本中。
答案 0 :(得分:7)
我现在正在使用脚本,但我很想知道是否已经有预建的方法。非常感谢Sundar的ForegroundColor技巧。
我不确定您是否使用Project.Log或直接转到Console.WriteLine(),任何NAnt忍者都想教育我吗?
这是脚本和使用它的示例目标:
<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>
答案 1 :(得分:6)
我多次使用的解决方案是拥有一个本地配置文件,其中包含特定于每个开发人员的密码,连接字符串等内容。构建时,NAnt构建脚本将包含这些设置。
版本控制系统中不存在本地配置文件,因此不会公开密码。开发人员第一次签出代码库并尝试构建时,他必须创建此配置文件。为了方便他,可以使用一个模板文件,例如my.config.template,其中包含可以自定义的所有属性。
答案 2 :(得分:4)
试试这个:
<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>
-->
答案 3 :(得分:3)
在您输入密码时显示星号:
<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>