从NAnt执行MSBuild并指定记录器时出错

时间:2010-09-27 20:24:03

标签: msbuild cruisecontrol.net nant

我正在尝试从NAnt脚本(由CruiseControl.NET调用)执行MSBuild。因为我从NAnt而不是CC.NET调用MSBuild,所以我想指定使用XmlLogger,这样我仍然可以为CC.NET生成MSBuild报告。这是负责使用MSBuild构建我们的解决方案的目标:

<target name="compile">
    <property name="solution.file" value="${source.dir}\GS3WebSite.sln"/>

    <if test="${not file::exists(solution.file)}">
        <fail message="The solution file (${solution.file}) was not found." />
    </if>

    <mkdir dir="${output.dir}" if="${not directory::exists(output.dir)}" />

    <!-- Specify CC.NET's XML logger -->
    <property name="msbuild.xmllogger"
              value="${ccnet.dir}\ThoughtWorks.CruiseControl.MsBuild.XmlLogger, ThoughtWorks.CruiseControl.MsBuild.dll"/>

    <exec program="${msbuild.dir}\msbuild.exe"
          commandline="${solution.file} /logger:&quot;${msbuild.logger}&quot;"
          workingdir="." failonerror="true" />
</target> 

执行此目标时,收到以下错误:

[exec] MSBUILD:错误MSB1021:无法创建记录器的实例。无法加载文件或程序集'ThoughtWorks.CruiseControl.MsBuild.XmlLogger \,C:\ Program Files \ CruiseControl.NET \ server \ ThoughtWorks.CruiseControl.MsBuild.dll'或其依赖项之一。给定的程序集名称或代码库无效。 (来自HRESULT的异常:0x80131047)

我认为这是因为在逗号之前插入了反斜杠。有没有其他方法来指定这个?或者我是否需要以某种方式逃避逗号?

1 个答案:

答案 0 :(得分:1)

我认为您在记录器声明中颠倒了顺序,即:AssemblyPath,LoggerName而不是LoggerName,AssemblyPath。
而且,据我所知,如果程序集中只有一个,则不需要指定logger类。 所以你可以试试

 <!-- Specify CC.NET's XML logger -->
<property name="msbuild.xmllogger"
          value="${ccnet.dir}\ThoughtWorks.CruiseControl.MsBuild.dll"/>