我正在尝试从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:"${msbuild.logger}""
workingdir="." failonerror="true" />
</target>
执行此目标时,收到以下错误:
[exec] MSBUILD:错误MSB1021:无法创建记录器的实例。无法加载文件或程序集'ThoughtWorks.CruiseControl.MsBuild.XmlLogger \,C:\ Program Files \ CruiseControl.NET \ server \ ThoughtWorks.CruiseControl.MsBuild.dll'或其依赖项之一。给定的程序集名称或代码库无效。 (来自HRESULT的异常:0x80131047)
我认为这是因为在逗号之前插入了反斜杠。有没有其他方法来指定这个?或者我是否需要以某种方式逃避逗号?
答案 0 :(得分:1)
我认为您在记录器声明中颠倒了顺序,即:AssemblyPath,LoggerName而不是LoggerName,AssemblyPath。
而且,据我所知,如果程序集中只有一个,则不需要指定logger类。
所以你可以试试
<!-- Specify CC.NET's XML logger -->
<property name="msbuild.xmllogger"
value="${ccnet.dir}\ThoughtWorks.CruiseControl.MsBuild.dll"/>