Dynamic Parameters are your friend.
http://confluence.public.thoughtworks.org/display/CCNET/Dynamic+Parameters


-----Original Message-----
From: [email protected] [mailto:[email protected]] On
Behalf Of Mike M
Sent: Wednesday, April 21, 2010 11:49 PM
To: ccnet-user
Subject: [ccnet-user] CCNet + NAnt + C#

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?


-- 
Subscription settings:
http://groups.google.com/group/ccnet-user/subscribe?hl=en

Reply via email to