From 673cd88a8f495a7a05901f4f9157b0c736e25047 Mon Sep 17 00:00:00 2001 From: mfakane Date: Fri, 3 Aug 2012 07:50:30 +0900 Subject: [PATCH] =?UTF-8?q?DllExporter=20=E3=81=8C=E3=83=97=E3=83=A9?= =?UTF-8?q?=E3=83=83=E3=83=88=E3=83=95=E3=82=A9=E3=83=BC=E3=83=A0=E3=83=90?= =?UTF-8?q?=E3=83=BC=E3=82=B8=E3=83=A7=E3=83=B3=E3=81=AB=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DllExporter/Program.cs | 22 ++++++++++++++++------ Tools/PostBuild.bat | 2 +- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/DllExporter/Program.cs b/DllExporter/Program.cs index 7320bd5..ba627a6 100644 --- a/DllExporter/Program.cs +++ b/DllExporter/Program.cs @@ -25,6 +25,7 @@ static int Main(string[] args) var input = ""; var output = ""; var il = ""; + var version = "v4"; foreach (var i in args) if (i.StartsWith("/")) @@ -48,6 +49,11 @@ static int Main(string[] args) case "il": il = sl.Last(); + break; + case "v2": + case "v4": + version = sl.Last().Substring(1); + break; } } @@ -56,7 +62,7 @@ static int Main(string[] args) if (string.IsNullOrEmpty(input)) { - Console.WriteLine("Usage: DllExporter [/x64] [/debug] [/il:filename] [/out:filename] "); + Console.WriteLine("Usage: DllExporter [/x64] [/debug] [/il:filename] [/out:filename] [/v2 | /v4] "); return 0; } @@ -115,7 +121,7 @@ static int Main(string[] args) if (!string.IsNullOrEmpty(il)) File.WriteAllText(il, ilcode, encoding); - Assemble(ilcode, output, is64, isDebug); + Assemble(ilcode, output, is64, isDebug, version); return 0; } @@ -145,7 +151,7 @@ static string GetCallingConvention(CallingConvention callingConvention) } } - static void Assemble(string il, string output, bool is64, bool isDebug) + static void Assemble(string il, string output, bool is64, bool isDebug, string version) { var temp = Path.GetTempFileName(); @@ -157,7 +163,7 @@ static void Assemble(string il, string output, bool is64, bool isDebug) { StartInfo = { - FileName = GetAssembler(), + FileName = GetAssembler(version), Arguments = string.Join(" ", new[] { "/nologo", @@ -247,9 +253,13 @@ static string Disassemble(string input) } } - static string GetAssembler() + static string GetAssembler(string version) { - return Path.Combine(RuntimeEnvironment.GetRuntimeDirectory(), "ilasm.exe"); + var dir = RuntimeEnvironment.GetRuntimeDirectory().TrimEnd(Path.DirectorySeparatorChar); + + dir = Directory.EnumerateDirectories(Path.GetDirectoryName(dir)).LastOrDefault(_ => Path.GetFileName(_).StartsWith("v" + version)) ?? dir; + + return Path.Combine(dir, "ilasm.exe"); } static string GetDisassembler() diff --git a/Tools/PostBuild.bat b/Tools/PostBuild.bat index 07eae56..7be6a1c 100644 --- a/Tools/PostBuild.bat +++ b/Tools/PostBuild.bat @@ -103,7 +103,7 @@ exit /b exit /b :export - %dllexporter% /%configuration% %il% %dllexporterOptions% %targetPath% + %dllexporter% /%configuration% /%targetplatform% %il% %dllexporterOptions% %targetPath% if errorlevel 1 ( echo error from DllExporter, batch job failed