Re: C# sharp scripting and NAnt + CCNet

"Phil Sayers" <[email protected]>
Newsgroups gmane.comp.windows.dotnet.nant.user
Message-ID <006b01cae155$c31c4500$4954cf00$@net>
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:[email protected]] 
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 <[email protected]>
To: [email protected]
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/nant-users
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.