在一个项目中,我引用了一个NuGet包,当调用其中一些方法时,它会向控制台输出文本。
但是我希望它不要这样做,因为我正在自己的代码中向控制台写入内容。
有没有办法阻止该包在控制台上输出内容,但仍然能够自己向控制台输出内容?
但是我希望它不要这样做,因为我正在自己的代码中向控制台写入内容。
有没有办法阻止该包在控制台上输出内容,但仍然能够自己向控制台输出内容?
你可以使用Console.SetOut
将默认输出设置为任何其他的TextWriter
- 但仍然可以使用原始的Console.Out
。以下是演示:
using System;
using System.IO;
class Test
{
static void Main()
{
var originalOut = Console.Out;
Console.SetOut(TextWriter.Null);
LibraryMethod();
originalOut.WriteLine("This should still go to the console.");
}
static void LibraryMethod()
{
Console.WriteLine("Imagine this were in the referenced package.");
Console.WriteLine("This isn't going anywhere. It's being discarded.");
}
}
这样也可以运行,但是有点烦人。如果可能的话,我会亲自询问原始软件包的作者来修改软件包 - 默认情况下,库写入到控制台非常奇怪。它至少应该允许您指定要写入的 TextWriter
。
TextWriter.Null
,这与上述方法基本相同。 - TheGeneralConsole.Out
或 Console.Error
流。所引用的包是 Tikaondotnet,它使用了 IKVM
。因此,通过在 C# 代码中设置 java.lang.System.setOut(null);
和 java.lang.System.setErr(null);
,成功地抑制了输出。 - CarenRose
Console.Write
)还是实际使用记录,你恰好将其发送到控制台? - Alexei Levenkov