Thanks for the help. I am using CCNet version 1.5.6804.1. Because of
the difficulties with using C# scripting, and having discovered
dynamic parameters, I am now trying to achieve what I desire using
dynamic parameters.

On Apr 25, 6:23 pm, David Cameron <[email protected]> wrote:
> I've filed the bug:http://jira.public.thoughtworks.org/browse/CCNET-1874
>
> <http://jira.public.thoughtworks.org/browse/CCNET-1874>Which version of
> CC.Net was in use when the exception happened?
>
> On 25 April 2010 19:18, David Cameron <[email protected]> wrote:
>
>
>
> > I believe the problem is in using a dynamic parameter for the password. No
> > one had thought of this scenario so it isn't tested. Password uses a
> > PrivateString so that it is never printed out to log files. There is an
> > implicit cast String => PrivateString but it isn't triggering in your
> > scenario. This is a bug.
>
> > I think the original problem was because CC.Net wouldn't be passing
> > anything to the standard-in of NAnt, therefore the .ReadLine() call would
> > block forever and your build would time out.
>
> > Are you using triggers with your build, or is it force only? Having dynamic
> > parameters in your source control block will make polling for changes
> > impossible, I think.
>
> > Dave
>
> > On 23 April 2010 10:35, Mike M <[email protected]> wrote:
>
> >> Thanks for the input Phil. I was using an older version of CCNet and
> >> wasn't aware of dynamic parameters. They are exactly what I was
> >> looking for! I have run into a problem though. I am having trouble
> >> using dynamic parameters to prompt the user for logon details to SVN.
> >> My code is as follows:
>
> >> <project name="Test Project">
> >>    <webURL>xxx</webURL>
> >>    <sourcecontrol type="svn">
> >>      <trunkUrl>xxx</trunkUrl>
> >>      <workingDirectory>xxx</workingDirectory>
> >>      <username>$[SVNUsername]</username>
> >>      <password>$[SVNPassword]</password>
> >>      <executable>C:\Program Files\VisualSVN\bin\svn.exe</executable>
> >>    </sourcecontrol>
>
> >>    ...
>
> >>    <parameters>
> >>      <textParameter name="SVNUsername">
> >>        <description>SVN Username</description>
> >>        <minimum>4</minimum>
> >>        <maximum>20</maximum>
> >>        <required>true</required>
> >>      </textParameter>
> >>      <textParameter name="SVNPassword">
> >>        <description>SVN Password</description>
> >>        <minimum>4</minimum>
> >>        <maximum>20</maximum>
> >>        <required>true</required>
> >>      </textParameter>
> >>    </parameters>
> >>  </project>
>
> >> However, I get the following error when I try to run a force build:
>
> >> [Test Project:ERROR] INTERNAL ERROR: Invalid cast from 'System.String'
> >> to 'ThoughtWorks.CruiseControl.Core.Util.PrivateString'.
> >> ----------
> >> System.InvalidCastException: Invalid cast from 'System.String' to
> >> 'ThoughtWorks.CruiseControl.Core.Util.PrivateString'.
> >>   at System.Convert.DefaultToType(IConvertible value, Type
> >> targetType, IFormatProvider provider)
> >>   at System.String.System.IConvertible.ToType(Type type,
> >> IFormatProvider provider)
> >>   at System.Convert.ChangeType(Object value, Type conversionType,
> >> IFormatProvider provider)
> >>   at System.Convert.ChangeType(Object value, Type conversionType)
> >>   at
>
> >> ThoughtWorks.CruiseControl.Core.Tasks.DynamicValueUtility.PropertyValue.Cha­ngeFieldValue(Object
> >> value)
> >>   at
>
> >> ThoughtWorks.CruiseControl.Core.Tasks.DynamicValueUtility.PropertyValue.Cha­ngeProperty(Object
> >> value)
> >>   at
> >> ThoughtWorks.CruiseControl.Core.Tasks.DirectDynamicValue.ApplyTo(Object
> >> value, Dictionary`2 parameters, IEnumerable`1 parameterDefinitions)
> >>   at
>
> >> ThoughtWorks.CruiseControl.Core.Sourcecontrol.SourceControlBase.ApplyParame­ters(Dictionary`2
> >> parameters, IEnumerable`1 parameterDefinitions)
> >>   at
> >> ThoughtWorks.CruiseControl.Core.Project.Integrate(IntegrationRequest
> >> request)
> >> ----------
>
> >> [Test Project:ERROR] INTERNAL ERROR: Invalid cast from 'System.String'
> >> to 'ThoughtWorks.CruiseControl.Core.Util.PrivateString'.
> >> ----------
> >> System.InvalidCastException: Invalid cast from 'System.String' to
> >> 'ThoughtWorks.CruiseControl.Core.Util.PrivateString'.
> >>   at System.Convert.DefaultToType(IConvertible value, Type
> >> targetType, IFormatProvider provider)
> >>   at System.String.System.IConvertible.ToType(Type type,
> >> IFormatProvider provider)
> >>   at System.Convert.ChangeType(Object value, Type conversionType,
> >> IFormatProvider provider)
> >>   at System.Convert.ChangeType(Object value, Type conversionType)
> >>   at
>
> >> ThoughtWorks.CruiseControl.Core.Tasks.DynamicValueUtility.PropertyValue.Cha­ngeFieldValue(Object
> >> value)
> >>   at
>
> >> ThoughtWorks.CruiseControl.Core.Tasks.DynamicValueUtility.PropertyValue.Cha­ngeProperty(Object
> >> value)
> >>   at
> >> ThoughtWorks.CruiseControl.Core.Tasks.DirectDynamicValue.ApplyTo(Object
> >> value, Dictionary`2 parameters, IEnumerable`1 parameterDefinitions)
> >>   at
>
> >> ThoughtWorks.CruiseControl.Core.Sourcecontrol.SourceControlBase.ApplyParame­ters(Dictionary`2
> >> parameters, IEnumerable`1 parameterDefinitions)
> >>   at
> >> ThoughtWorks.CruiseControl.Core.Project.Integrate(IntegrationRequest
> >> request)
> >>   at ThoughtWorks.CruiseControl.Core.ProjectIntegrator.Integrate()
> >>   at ThoughtWorks.CruiseControl.Core.ProjectIntegrator.Run()
> >> ----------
>
> >> Can anyone help me with fixing this?
>
> >> On Apr 23, 12:37 am, "Phil Sayers" <[email protected]> wrote:
> >> > Dynamic Parameters are your friend.
> >>http://confluence.public.thoughtworks.org/display/CCNET/Dynamic+Param...
>
> >> > -----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();
> >> >         ....
> >> >     }
> >> > }
>
> ...
>
> read more »- Hide quoted text -
>
> - Show quoted text -


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

Reply via email to