How will ccnet accept user input if its running as a service on an unattended
build server?
Can you store the username, password, an database in a database and have the
nant script look at that if a console isn't available?
________________________________
From: Simon H <yo...@live.com>
To: nant-users@lists.sourceforge.net
Sent: Tue, April 20, 2010 10:32:20 PM
Subject: [NAnt-users] C# sharp scripting and NAnt + CCNet
Hi guys,
I have a C# script within my NAnt build file which allows me to accept user
input from the commandline. A truncutated excerpt of the NAnt build file is:
...
<property name="username" value="" />
<property name="password" value="" />
<property name="database" value="" />
...
<target name="menu">
<script language="C#" mainclass="GetInput">
<code>
<![CDATA[
class GetInput
{
public static void ScriptMain(Project project)
{
Console.Clear();
Console.WriteLine("===================================================================");
Console.WriteLine("Welcome to the Compile and Deploy Oracle Forms
and Reports Facility");
Console.WriteLine("===================================================================");
Console.Write("Please enter username: ");
project.Properties["username"] = Console.ReadLine();
Console.WriteLine();
Console.Write("Please enter password: ");
project.Properties["password"] = Console.ReadLine();
Console.WriteLine();
Console.Write("Please enter database: ");
project.Properties["database"] = Console.ReadLine();
Console.WriteLine();
...
]]>
</code>
</script>
</target>
When I run this build file from the commandline, it works perfectly. However,
when I call this build file from CCNet it does not work. The only reason for
this I can think of is that when CCNet calls the NAnt script, it is not sure
how to pass the C# script calls to the System.Console class to the commandline.
I'm not sure how to do this though.
I've also been playing around with the idea of the C# script opening a new
instance of cmd.exe and then trying to execute the remainder of the script.
From searches on Google, I found the following solution that works as a C#
class:
using System;
using System.Windows.Forms;
using System.Text;
using System.IO;
using System.Runtime.InteropServices;
using Microsoft.Win32.SafeHandles;
class Program
{
[DllImport("kernel32.dll",
EntryPoint = "GetStdHandle",
SetLastError = true,
CharSet = CharSet.Auto,
CallingConvention = CallingConvention.StdCall)]
private static extern IntPtr GetStdHandle(int nStdHandle);
[DllImport("kernel32.dll",
EntryPoint = "AllocConsole",
SetLastError = true,
CharSet = CharSet.Auto,
CallingConvention = CallingConvention.StdCall)]
private static extern int AllocConsole();
private const int STD_OUTPUT_HANDLE = -11;
private const int MY_CODE_PAGE = 437;
private static string deployment = "\\\\vm-osb-oasd\\sohaan";
static void Main(string[] args)
{
AllocConsole();
IntPtr stdHandle = GetStdHandle(STD_OUTPUT_HANDLE);
SafeFileHandle safeFileHandle = new SafeFileHandle(stdHandle, true);
FileStream fileStream = new FileStream(safeFileHandle,
FileAccess.Write);
Encoding encoding = System.Text.Encoding.GetEncoding(MY_CODE_PAGE);
StreamWriter standardOutput = new StreamWriter(fileStream, encoding);
standardOutput.AutoFlush = true;
Console.SetOut(standardOutput);
Console.Clear();
Console.WriteLine("===================================================================");
Console.WriteLine("Welcome to the Compile and Deploy Oracle Forms and
Reports Facility");
Console.WriteLine("===================================================================");
Console.Write("Please enter username: ");
string username = Console.ReadLine();
....
}
}
This works perfectly in a C# environment. However, I do not know how to embed
it within a NAnt script correctly...From what I know about NAnt, I may need to
create an extension, but am uncertain of how to go about this. Can anyone help
me out?
________________________________
Meet local singles online. Browse profiles for FREE!
------------------------------------------------------------------------------
_______________________________________________
NAnt-users mailing list
NAnt-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/nant-users