What you want is the "ifdef" statement, which tests whether or not a
symbol is defined.  "if" tests the current value of the symbol (and
errors out if it is not defined),

<cb:ifdef name="BuildControls">
...etc...
</cb:ifdef>

On Oct 29, 10:21 am, Przemysław Włodarczak
<[email protected]> wrote:
> Hi,
>
> I use ccnet v. 1.5.7256.1
> I have following snippet in one of my project in ccnet.config file:
>
>       <tasks>
>         <!-- main build -->
>         <cb:if expr="'$(BuildControls)'=='true'">
>           <msbuild>
>               <!-- omitted for brevity
>           </msbuild>
>         </cb:if>
>         <cb:else>
>         </cb:else>
>         <msbuild>
>               <!-- omitted for brevity
>         </msbuild>
>       </tasks>
>
> However, when ccnet tries to load this, fails with exception:
>
> ThoughtWorks.CruiseControl.Core.Config.Preprocessor.EvaluationException:
> Reference to unknown symbol if
>    at
> ThoughtWorks.CruiseControl.Core.Config.Preprocessor.Utils.ThrowException(ExceptionFactory
> factory, String fmt, Object[] args)
>    at
> ThoughtWorks.CruiseControl.Core.Config.Preprocessor.ConfigPreprocessorEnvironment._GetConstantDef(String
> name)
>    at
> ThoughtWorks.CruiseControl.Core.Config.Preprocessor.ConfigPreprocessorEnvironment.eval_constant(String
> name)
>    at
> ThoughtWorks.CruiseControl.Core.Config.Preprocessor.ConfigPreprocessor.PreProcess(XmlReader
> input, XmlWriter output, PreprocessorUrlResolver resolver, Uri
> input_uri)
>    at
> ThoughtWorks.CruiseControl.Core.Config.DefaultConfigurationFileLoader.CreateXmlValidatingLoader(FileInfo
> configFile)
>    at
> ThoughtWorks.CruiseControl.Core.Config.DefaultConfigurationFileLoader.AttemptLoadConfiguration(FileInfo
> configFile)
>    at
> ThoughtWorks.CruiseControl.Core.Config.DefaultConfigurationFileLoader.Load(FileInfo
> configFile)
>    at
> ThoughtWorks.CruiseControl.Core.Config.FileConfigurationService.Load()
>    at
> ThoughtWorks.CruiseControl.Core.Config.FileWatcherConfigurationService.Load()
>    at
> ThoughtWorks.CruiseControl.Core.Config.CachingConfigurationService.Load()
>    at
> ThoughtWorks.CruiseControl.Core.CruiseServer..ctor(IConfigurationService
> configurationService, IProjectIntegratorListFactory
> projectIntegratorListFactory, IProjectSerializer projectSerializer,
> IProjectStateManager stateManager, IFileSystem fileSystem,
> IExecutionEnvironment executionEnvironment, List`1 extensionList)
>    at
> ThoughtWorks.CruiseControl.Core.CruiseServerFactory.CreateLocal(String
> configFile)
>    at
> ThoughtWorks.CruiseControl.Core.CruiseServerFactory.CreateRemote(String
> configFile)
>    at
> ThoughtWorks.CruiseControl.Core.CruiseServerFactory.Create(Boolean
> remote, String configFile)
>    at
> ThoughtWorks.CruiseControl.Service.AppRunner.CreateAndStartCruiseServer()
>    at ThoughtWorks.CruiseControl.Service.AppRunner.Run(String action,
> Boolean usesShadowCopying)
>
> It looks lika if command is not recognized. Instead preprocessor looks
> for variable named "if".
> What am I doing wrong?
>
> Regards, Przemyslaw

Reply via email to