好吧,终于解决了这个问题。事实证明,错误级别与这个特定问题无关。相反,最终出现在 Visual Studio 输出窗口中的文本格式似乎是最重要的......
失败的 NUnit 测试显示在 Visual Studio 错误列表窗口中,项目描述设置为 NUnit 错误消息的命名空间和方法名称,文件设置为神秘字符串“EXEC”。如果您打开输出窗口,在 NUnit 错误消息的开头也会出现相同的字符串“EXEC”。但它不是原始 NUnit 错误消息的一部分。我添加了一个中间人来查看发生了什么,如下所示:
static void Main(string[] args)
{
Console.WriteLine("args: " + string.Join(" ", args));
Process p = new Process()
{
StartInfo = new ProcessStartInfo(@"C:\libraries\nunit\nunit-2.5.7-net-2.0\bin\nunit-console.exe", string.Join(" ", args))
{
UseShellExecute = false,
RedirectStandardOutput = true
}
};
int lineNumber = 0;
p.OutputDataReceived += (s, e) =>
{
//if (!Debugger.IsAttached && !string.IsNullOrWhiteSpace(e.Data) && e.Data.Contains("Test Error"))
//{
// Debugger.Launch();
//}
//string line = e.Data;
string line = string.IsNullOrWhiteSpace(e.Data) ? string.Empty : e.Data.Replace("Test Error", "Test Critical Failure");
Console.WriteLine("[" + (++lineNumber) + "] " + line);
};
p.Start();
p.BeginOutputReadLine();
p.WaitForExit();
Console.WriteLine("nunit exited with code " + p.ExitCode);
Environment.Exit(0);
}
我在构建后事件中调用了这个程序而不是 nunit,并且在调试时确实有没有字符串“EXEC”的 NUnit 错误消息。此外,字符串“EXEC”甚至出现在我现在添加到测试输出的行号之前。当我跳过所有带有字符串“测试错误”的行,或者将“测试错误”替换为“测试严重失败”之类的其他内容时,项目的构建成功了。但是当我将以下内容添加到项目的构建后事件中时,它再次失败,并且 Visual Studio 错误列表窗口中的项目描述设置为“foo.bar”:
echo Test Error : foo.bar
因此,Visual Studio 或某些扩展似乎会干预构建,并在 Visual Studio 输出窗口中出现格式为“测试错误:bla.bla”的字符串时使其失败。据报道,整个构建后事件会以退出代码 -1 失败,即使构建后事件的最后一个命令将错误级别设置为其他值。现在公平地说,我不确定这是否适用于标准 Visual Studio 2010 版本或某些扩展,所以为了安全起见,这是我的整个环境:
Microsoft Visual Studio 2010 版本 10.0.40219.1 SP1Rel Microsoft
.NET Framework 版本 4.0.30319 SP1Rel
安装版本:专业版
Microsoft Office 开发人员工具
Microsoft Visual Basic 2010
Microsoft Visual C# 2010
Microsoft Visual C++ 2010
Microsoft Visual F# 2010
Microsoft Visual Studio 2010 Team Explorer
Microsoft Visual Web Developer 2010
添加参考对话框 Plus!1.0
AlignAssignments 1.0
AutoBraceComplete 1.0
ClearCase Search 1.0
用于 Microsoft Visual Studio 2010
Devart 代码比较的 Crystal Reports 模板 2.70.3
Document Well 2010 Plus 1.0.10916.0
Microsoft Visual Studio 2010 Professional - ENU Service Pack 1 (KB983509)
Microsoft Visual Studio 2010 SharePoint 开发人员工具 10.0 .40219
Microsoft.VisualStudio.QuickAccess.Package 1.0
OptionsPageImpl 1.0
PowerCommands for Visual Studio 2010 1.0
QuickFind 1.0
Rational ClearCase
Visual Nunit 1.0
VSCommands 2010 3.8.0.0
FeiLoader
ObjectWizard
好的,所以有一个使用中间人的解决方法,但如果有人知道一些 Visual Studio 或扩展设置或修复可以解决这个问题,或者我的解决方案的更好替代方案,那么我所有的耳朵!
更新:禁用所有扩展和加载项后,问题仍然存在。它开始看起来像原生的 Visual Studio 特性。