From 6cbd0473921cdfcc4fdb53e4f3fa27bcae081f12 Mon Sep 17 00:00:00 2001 From: Dimitar Dobrev Date: Fri, 23 Sep 2016 02:12:58 +0300 Subject: [PATCH] Fixed the auto-compilation not to use an old and buggy CS compiler on Windows. Fixes https://github.com/mono/CppSharp/issues/688. Signed-off-by: Dimitar Dobrev --- .../{MonoToolchain.cs => ManagedToolchain.cs} | 17 +++++++++++------ src/Generator/Driver.cs | 3 ++- 2 files changed, 13 insertions(+), 7 deletions(-) rename src/Core/Toolchains/{MonoToolchain.cs => ManagedToolchain.cs} (67%) diff --git a/src/Core/Toolchains/MonoToolchain.cs b/src/Core/Toolchains/ManagedToolchain.cs similarity index 67% rename from src/Core/Toolchains/MonoToolchain.cs rename to src/Core/Toolchains/ManagedToolchain.cs index c730c27a..ebca9e1d 100644 --- a/src/Core/Toolchains/MonoToolchain.cs +++ b/src/Core/Toolchains/ManagedToolchain.cs @@ -5,19 +5,19 @@ using System.Linq; namespace CppSharp { - public static class MonoToolchain + public static class ManagedToolchain { public static string FindMonoPath() { if (Platform.IsWindows) - return @"C:\\Program Files (x86)\\Mono"; + return @"C:\\Program Files (x86)\\Mono\bin"; else if (Platform.IsMacOS) - return "/Library/Frameworks/Mono.framework/Versions/Current"; + return "/Library/Frameworks/Mono.framework/Versions/Current/bin"; throw new NotImplementedException(); } - public static string FindCSharpCompilerPath() + public static string FindCSharpCompilerDir() { if (Platform.IsWindows) { @@ -27,10 +27,15 @@ namespace CppSharp var sdk = versions.Last(); - return Path.Combine(sdk.Directory, "csc.exe"); + return sdk.Directory; } - return Path.Combine(FindMonoPath(), "bin", "mcs.exe"); + return FindMonoPath(); + } + + public static string FindCSharpCompilerPath() + { + return Path.Combine(FindCSharpCompilerDir(), Platform.IsWindows ? "csc.exe" : "mcs"); } } } diff --git a/src/Generator/Driver.cs b/src/Generator/Driver.cs index 34f703d0..175eaef9 100644 --- a/src/Generator/Driver.cs +++ b/src/Generator/Driver.cs @@ -428,7 +428,8 @@ namespace CppSharp Diagnostics.Message("Compiling {0}...", module.LibraryName); CompilerResults compilerResults; using (var codeProvider = new CSharpCodeProvider( - new Dictionary { { "CompilerVersion", "v4.0" } })) + new Dictionary { + { "CompilerDirectoryPath", ManagedToolchain.FindCSharpCompilerDir() } })) { compilerResults = codeProvider.CompileAssemblyFromFile( compilerParameters, module.CodeFiles.ToArray());