Thanks for the help Phil. Dynamic Parameters is exactly what I was looking for!
 


From: p...@cds-am.net
To: nant-users@lists.sourceforge.net
Date: Wed, 21 Apr 2010 09:22:59 -0400
Subject: Re: [NAnt-users] C# sharp scripting and NAnt + CCNet







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+Release+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 profiles for FREE!                            
          
_________________________________________________________________
Need a new place to live? Find it on Domain.com.au
http://clk.atdmt.com/NMN/go/157631292/direct/01/
------------------------------------------------------------------------------
_______________________________________________
NAnt-users mailing list
NAnt-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/nant-users

Reply via email to