One of the more recent editions of ccnet allows prompting the user for
parameters when a  build is forced.

http://confluence.public.thoughtworks.org/display/CCNET/CCNet+1.5+CTP+Releas
e+Notes

 

see the "Dynamic Parameters" section.

 

 

From: Ron Grabowski [mailto:rongrabow...@yahoo.com] 
Sent: Tuesday, April 20, 2010 11:04 PM
To: nant
Subject: Re: [NAnt-users] C# sharp scripting and NAnt + CCNet

 

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
<http://clk.atdmt.com/NMN/go/150855801/direct/01/>  profiles for FREE!

------------------------------------------------------------------------------
_______________________________________________
NAnt-users mailing list
NAnt-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/nant-users

Reply via email to