<p dir="ltr">Hi Dan,</p>
<p dir="ltr">As I am currently working on the Process class, I am getting a look at your bug.</p>
<p dir="ltr">Does settingĀ  StandardOutputEncoding = Console.OutputEncoding on the ProcessStartInfo passed to Start fixes your issue? This is the behaviour on .NET, so this is the behaviour that we are going to adopt (at least for bug compatibility).</p>
<p dir="ltr">Thank you! :)</p>
<p dir="ltr">Ludovic<br>
</p>
<br><div class="gmail_quote"><div dir="ltr">---------- Forwarded message ---------<br>From: Dan Liew <<a href="mailto:dan@su-root.co.uk">dan@su-root.co.uk</a>><br>Date: Fri, 9 Oct 2015, 14:40<br>Subject: [Mono-dev] System.Diagnostics.Process behaves differently in and outside of a NUnit test case<br>To:  <<a href="mailto:mono-devel-list@lists.ximian.com">mono-devel-list@lists.ximian.com</a>><br></div><br><br>Hi,<br>
<br>
This is an issue that I was bitten by a while ago but I didn't post<br>
here because I managed to work around it but it looks like something<br>
inside mono changed between 3.12 and 4.0.4 which my broke my<br>
workaround.<br>
<br>
The issue basically is I observed my code failing when called from an<br>
NUnit test but when run from an executable it would work fine. The<br>
code in question [1] calls out to an external process using<br>
``System.Diagnostics.Process`` where the standard input is redirected.<br>
When running from an NUnit test a UTF-8 BOM gets sent to the process's<br>
standard input and when running from an executable the UTF-8 BOM does<br>
not get sent.<br>
<br>
I looked at this again and I've noticed two things<br>
<br>
* In System.Diagnostics.Process.Start_noshell() the encoding for the<br>
writable end of the pipe connected to the child process's standard<br>
input is taken from ``Console.Out.Encoding``. Is this really a good<br>
idea? Depending on this global value seems like a bad idea and could<br>
introduce weird race conditions if the Console.Out encoding is changed<br>
in some way (e.g. ``Console.OutputEncoding = new<br>
System.Text.UTF8Encoding(false);`` seems to do this and this the new<br>
workaround I ended up using)<br>
<br>
* When running in an executable the value of<br>
``Console.Out.Encoding.emitUTF8Identifier`` is false but when running<br>
in an NUnit test the value of<br>
````Console.Out.Encoding.emitUTF8Identifier`` is true!<br>
I'm not sure if this is Mono's or NUnit's fault but this seems very wrong to me.<br>
<br>
I've filled a bug at [2] and [3] but thought I'd post about it here<br>
too as this issue seems partially tied to some of mono's internal<br>
implementation details.<br>
<br>
[1] <a href="https://bugzilla.xamarin.com/attachment.cgi?id=13247" rel="noreferrer" target="_blank">https://bugzilla.xamarin.com/attachment.cgi?id=13247</a><br>
[2] <a href="https://bugzilla.xamarin.com/show_bug.cgi?id=21374" rel="noreferrer" target="_blank">https://bugzilla.xamarin.com/show_bug.cgi?id=21374</a><br>
[3] <a href="https://github.com/nunit/nunit/issues/881" rel="noreferrer" target="_blank">https://github.com/nunit/nunit/issues/881</a><br>
<br>
Thanks,<br>
Dan.<br>
_______________________________________________<br>
Mono-devel-list mailing list<br>
<a href="mailto:Mono-devel-list@lists.ximian.com" target="_blank">Mono-devel-list@lists.ximian.com</a><br>
<a href="http://lists.ximian.com/mailman/listinfo/mono-devel-list" rel="noreferrer" target="_blank">http://lists.ximian.com/mailman/listinfo/mono-devel-list</a><br>
</div>