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.ChangeFieldValue(Object > >> value) > >> at > > >> ThoughtWorks.CruiseControl.Core.Tasks.DynamicValueUtility.PropertyValue.ChangeProperty(Object > >> value) > >> at > >> ThoughtWorks.CruiseControl.Core.Tasks.DirectDynamicValue.ApplyTo(Object > >> value, Dictionary`2 parameters, IEnumerable`1 parameterDefinitions) > >> at > > >> ThoughtWorks.CruiseControl.Core.Sourcecontrol.SourceControlBase.ApplyParameters(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.ChangeFieldValue(Object > >> value) > >> at > > >> ThoughtWorks.CruiseControl.Core.Tasks.DynamicValueUtility.PropertyValue.ChangeProperty(Object > >> value) > >> at > >> ThoughtWorks.CruiseControl.Core.Tasks.DirectDynamicValue.ApplyTo(Object > >> value, Dictionary`2 parameters, IEnumerable`1 parameterDefinitions) > >> at > > >> ThoughtWorks.CruiseControl.Core.Sourcecontrol.SourceControlBase.ApplyParameters(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
