Visual Studio MSBuild自定义任务Log.LogError无效

时间:2013-01-14 20:38:17

标签: logging msbuild task

我们编写了一个自定义的msbuild任务,可以在我们的项目中对代码文件进行一些预处理。我们希望能够在标准错误列表窗口中显示错误和警告。

Visual Studio提供了应该执行此操作的TaskLoggingHelper(Log.LogError)方法......但我发现Log.LogError(message,messageArgs)没有填写正确的文件名和行号。 。并且Log.LogError(subCategory,errorCode,helpKeyword,file,lineNumber,columnNumber,endLineNumber,endColumnNumber,message,messageArgs)返回错误,指出即使我已明确设置此消息,该消息也不能为空。

似乎Visual Studio可能没有使用重载(更详细)的方法。

我发送的代码行如下..

string fileName = "main.c";
int lineNum = 415;
int colNum = 5;
string message = "Error Message Text.";

Log.LogError("", "", "", fileName, lineNum, colNum, 0, 0, message, null); 

是否有人成功使用此方法重载来记录MSBuild中的错误?

由于

**更新**

在阅读了Nick的回复(下文)后,我做了以下测试...

Log.LogError("test1", "test2", "test2", fileName, lineNum, colNum, 0, 0, message);

我删除了messageArgs并在前三个参数中添加了一些文本。我得到的响应令人惊讶...... ErrorList窗口中列出的消息是“test1”而不是“Error Message Text”。但不确定这会对情况有所了解。

戴夫

2 个答案:

答案 0 :(得分:2)

好的,在长时间戳这个问题之后..我永远无法得到Log.LogError(“”,“”,“”,fileName,lineNum,colNum,0,0,message,null);工作的解决方案。无论出于何种原因,这种过载似乎都没有得到正确的启发。我最终找到了一个可以做同样事情的替代解决方案。我认为提供我的解决方案是好的,以防其他人想要做同样的事情;

BuildErrorEventArgs errorEvent = new BuildErrorEventArgs("", "", fileName, lineNum, colNum, 0, 0, messageErr, "", "");
BuildEngine.LogErrorEvent(errorEvent);

所以我所做的是将IBuildEngine接口实现为我的ITask类的一部分。从那时我就能够访问LogErrorEvent,它允许您传递BuildErrorEventArgs结构,该结构使您可以访问错误的所有详细信息。

希望这有帮助

答案 1 :(得分:-1)

如果您继承自Microsoft.Build.Utilities.Task,您应该可以使用它。我一直在使用更简单的重载语法:

  base.Log.LogError(Strings.ItemsToFilterMissingError);

我注意到在大的重载中你已经指定了消息格式字符串的args类型为

 params object[] messageArgs

我认为您可以省略参数而不是传递显式null。这可能是你的问题。