Cruise Control解析“!” NAnt文件中的字符

时间:2011-10-04 09:40:07

标签: cruisecontrol.net mstest nant

我在Cruise Control中配置了一个运行NAnt脚本的任务,该脚本运行MSTest套件。 MSTest允许我指定测试类别,因此我想指定“!Integration”(这意味着“不运行集成测试”)。当我从命令行运行它时,我的Nant脚本成功运行,但是当Cruise运行它时,“!Integration”指令出现乱码 - Cruise输出表明它在'!'之后插入一个换行符。字符。结果是所有我的测试运行,包括集成测试。

从ccnet.config中提取:

<tasks>
  <nant>
    <executable>C:\nant\bin\nant.exe</executable>
    <baseDirectory>C:\MyProject\BuildDirectory</baseDirectory>
    <buildFile>MyProject.build</buildFile>
    <targetList>
       <target>CIServerBuild</target>  
    </targetList>
  </nant>
</tasks>

从MyProject.build提取:

<target name="CIServerBuild">
      :
    <call target="RunUnitTests" />
</target>

<target name="RunUnitTests">
    <property name="TestCategories" value="!Integration" />
    <call target="RunMSTest"  failonerror="true"/>
</target>

<target name="RunMSTest">
    <call target="BuildListOfTestContainers"  failonerror="true"/>
    <exec program="${MSTest.exe}"
        commandline=" /category:&quot;${TestCategories}&quot; ${TestContainers} /resultsfile:${MSTest.ResultsFile} /nologo "
     />
</target>

从Cruise输出中提取:

[exec] Starting 'C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\MSTest.exe ( /category:"!
Integration" /testcontainer:C:\TaxWise\BuildDirectory\TaxWise\TaxWise.Data.Tests\bin\Debug\TaxWise.Data.Tests.dll /testcontainer:C:\TaxWise\BuildDirectory\TaxWise\TaxWise.Domain.Tests\bin\Debug\TaxWise.Domain.Tests.dll /testcontainer:C:\TaxWise\BuildDirectory\TaxWise\TaxWise.Infrastructure.Tests\bin\Debug\TaxWise.Infrastructure.Tests.dll /resultsfile:.\TestResults\UnitTests.trx /nologo )' 
in 'C:\TaxWise\BuildDirectory'

我试过更换'!'

字符
'&#33;' 

但这没有任何区别。

任何想法,任何人?

2 个答案:

答案 0 :(得分:1)

我建议将exec任务中的命令行属性拆分为Nant arg元素。

http://nant.sourceforge.net/release/0.85/help/tasks/exec.html

您将获得更大的灵活性,可读性将会提高。

答案 1 :(得分:0)

是的,也许它不是由CC引起的。尝试在verbose="True"任务上设置<exec>并检查原始构建协议。请记住,您在报告页面上看到的内容并不是确切的输出(通常受到换行和合并空格的影响)。

可能取决于您运行脚本的位置,对构建属性或不同环境变量的隐藏依赖性。您可以使用<exec program="cmd.exe" commandline="/c set" />检查后者。对于属性,您可以使用以下脚本:

 <script language="C#" prefix="util" verbose="true">
    <code>
        <![CDATA[
        public static void ScriptMain(Project project) 
        {
            foreach (DictionaryEntry entry in new System.Collections.SortedList(project.Properties) ) 
                Console.WriteLine("{0}={1}", entry.Key, entry.Value); 
        }
        ]]>
    </code>
  </script>