Since I upgraded to ccnet 1.6 I have problems using dynamic parameters
in a nant task. It did work correctly with the 1.5 release. I defined
the following parameter in my project:
<parameters>
<selectParameter name="BuildType">
<allowedValues>
<value name="NightlyBuild">NightlyBuild</value>
<value name="IncrementalBuild">IncrementalBuild</value>
</allowedValues>
<default>IncrementalBuild</default>
</selectParameter>
</parameters>
When I add a task like:
<exec executable="cmd.exe" buildArgs="/C echo $[BuildType]"/>
It will work and the output will be:
--------------------
[Workstation (Release):DEBUG] Starting process [cmd.exe] in working
directory [D:\CruiseControl\Workstation (Release)\Sources] with
arguments [/C echo IncrementalBuild]
[Workstation (Release):DEBUG] Not setting PriorityClass on [D:
\CruiseControl\Workstation (Release)\Sources\cmd.exe] to default
Normal
[10:DEBUG] [Workstation (Release) cmd.exe] IncrementalBuild
--------------------
But when I use the dynamic parameter in my ant task it will throw an
exception.
--------------------
System.Reflection.TargetParameterCountException: Parameter count
mismatch.
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj,
BindingFlags invokeAttr, Binder binder, Object[] parameters,
CultureInfo culture, Boolean skipVisibilityChecks)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj,
BindingFlags invokeAttr, Binder binder, Object[] parameters,
CultureInfo culture)
at System.Reflection.RuntimePropertyInfo.SetValue(Object obj,
Object value, BindingFlags invokeAttr, Binder binder, Object[] index,
CultureInfo culture)
at System.Reflection.RuntimePropertyInfo.SetValue(Object obj,
Object value, Object[] index)
at
ThoughtWorks.CruiseControl.Core.Tasks.DynamicValueUtility.PropertyValue.ChangePropertyValue(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.Tasks.TaskBase.ApplyParameters(Dictionary`2
parameters, IEnumerable`1 parameterDefinitions)
at
ThoughtWorks.CruiseControl.Core.Project.RunTasks(IIntegrationResult
result, IList tasksToRun, Dictionary`2 parameterValues)
at ThoughtWorks.CruiseControl.Core.Project.Run(IIntegrationResult
result)
at
ThoughtWorks.CruiseControl.Core.IntegrationRunner.Build(IIntegrationResult
result)
at
ThoughtWorks.CruiseControl.Core.IntegrationRunner.Integrate(IntegrationRequest
request)
--------------------
My nant task looks like this:
<nant>
<executable>$(tool-nant)</executable>
<baseDirectory>$(base-dir)</baseDirectory>
<nologo>true</nologo>
<buildFile>Sources\Build\default.build</buildFile>
<logger>NAnt.Core.XmlLogger</logger>
<targetList>
<target>$[BuildType]</target>
</targetList>
<buildTimeoutSeconds>1800</buildTimeoutSeconds>
</nant>
How can I make the dynamic parameters work with ccnet 1.6?
Thanks for your help.