在引用的包中禁止Console.Write

4
在一个项目中,我引用了一个NuGet包,当调用其中一些方法时,它会向控制台输出文本。
但是我希望它不要这样做,因为我正在自己的代码中向控制台写入内容。
有没有办法阻止该包在控制台上输出内容,但仍然能够自己向控制台输出内容?

它是写入控制台(例如Console.Write)还是实际使用记录,你恰好将其发送到控制台? - Alexei Levenkov
1个回答

5

你可以使用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


1
我想也可以使用 TextWriter.Null,这与上述方法基本相同。 - TheGeneral
1
@TheGeneral:哦,不错啊——我不知道这个功能。我会进行编辑的。 - Jon Skeet
1
尝试后发现,它并没有使用标准的 Console.OutConsole.Error 流。所引用的包是 Tikaondotnet,它使用了 IKVM。因此,通过在 C# 代码中设置 java.lang.System.setOut(null);java.lang.System.setErr(null);,成功地抑制了输出。 - CarenRose

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接