Bug 22819 - CSharpCodeCompiler.CompileFromFileBatch assumes 'mcs' is in the PATH
Summary: CSharpCodeCompiler.CompileFromFileBatch assumes 'mcs' is in the PATH
Status: NEW
Alias: None
Product: Class Libraries
Classification: Mono
Component: System (show other bugs)
Version: 3.4.0
Hardware: PC Linux
: --- normal
Target Milestone: Untriaged
Assignee: Marek Safar
Depends on:
Reported: 2014-09-10 08:05 UTC by Craig Minihan
Modified: 2016-04-16 08:54 UTC (History)
2 users (show)

See Also:
Is this bug a regression?: ---
Last known good build:


Description Craig Minihan 2014-09-10 08:05:08 UTC
CompileFromFileBatch() in CSharpCodeCompiler assumes 'mcs' is in the path when it executes. 

If Mono is installed to /usr/local and is executed under a daemon as /usr/local/bin/mono then there is *NO* PATH entry for /usr/local/bin. Under these circumstances when CompileFromFileBatch is called it can't locate 'mcs'. The offending code is:

			// FIXME: these lines had better be platform independent.
			if (Path.DirectorySeparatorChar == '\\') {
				mcs.StartInfo.FileName = windowsMonoPath;
				mcs.StartInfo.Arguments = "\"" + windowsMcsPath + "\" " +
					BuildArgs (options, fileNames, ProviderOptions);
			} else {
				mcs.StartInfo.Arguments=BuildArgs(options, fileNames, ProviderOptions);

So under platforms with a / as the path separator we just revert to PATH to locate mcs. 

An alternate scenario is that more than one mcs exists on the platform and a mismatched version is earlier in the path than the current mono instance causing undefined behaviour when the compiled assembly is loaded.

Using the path to the current running instance binary would be an obvious first attempt here - with further fallbacks if that fails - relying on PATH is just asking for trouble.

Note You need to log in before you can comment on or make changes to this bug.