Проблема в том, что бегун пытается расположить потоки вывода и ошибок, которые использует linqpad.В конечном счете, поскольку он в настоящее время используется и должен оставаться открытым, это приводит к ошибке.
Эту проблему можно избежать, если перенаправить потоки вывода и ошибок в файл либо на самой консоли, либо аргументами длябегун (--out
и --err
params).
Тем не менее, весь смысл его запуска в linqpad заключается в том, что результаты отображаются на панели результатов.Поэтому вы можете создать оболочку для потоков, которая игнорирует вызовы dispose.
void Main()
{
var workDir = Path.Combine(Util.MyQueriesFolder, "nunit-work");
var args = new string[]
{
"-noh",
$"--work={workDir}",
};
RunUnitTests(args);
}
void RunUnitTests(string[] args, Assembly assembly = null)
{
Console.SetOut(new NoDisposeTextWriter(Console.Out));
Console.SetError(new NoDisposeTextWriter(Console.Error));
new AutoRun(assembly ?? Assembly.GetExecutingAssembly()).Execute(args);
}
class NoDisposeTextWriter : TextWriter
{
private readonly TextWriter writer;
public NoDisposeTextWriter(TextWriter writer) => this.writer = writer;
public override Encoding Encoding => writer.Encoding;
public override IFormatProvider FormatProvider => writer.FormatProvider;
public override void Write(char value) => writer.Write(value);
public override void Flush() => writer.Flush();
// forward all other overrides as necessary
protected override void Dispose(bool disposing)
{
// no nothing
}
}