From bfb5de5676fd08059d4c86402ab89e7fa2376bd9 Mon Sep 17 00:00:00 2001 From: Stephane Delcroix Date: Mon, 6 Feb 2017 09:33:18 +0100 Subject: [XamlC] support portable pdb (#726) --- Xamarin.Forms.Build.Tasks/DebugXamlCTask.cs | 4 +-- Xamarin.Forms.Build.Tasks/XamlCTask.cs | 6 ++-- Xamarin.Forms.Build.Tasks/XamlTask.cs | 52 +++++++++++++++++++++++++++++ 3 files changed, 56 insertions(+), 6 deletions(-) (limited to 'Xamarin.Forms.Build.Tasks') diff --git a/Xamarin.Forms.Build.Tasks/DebugXamlCTask.cs b/Xamarin.Forms.Build.Tasks/DebugXamlCTask.cs index 1c7acac4..d356c9c6 100644 --- a/Xamarin.Forms.Build.Tasks/DebugXamlCTask.cs +++ b/Xamarin.Forms.Build.Tasks/DebugXamlCTask.cs @@ -46,7 +46,7 @@ namespace Xamarin.Forms.Build.Tasks using (var assemblyDefinition = AssemblyDefinition.ReadAssembly(Assembly, new ReaderParameters { ReadWrite = true, ReadSymbols = DebugSymbols, - SymbolReaderProvider = System.Type.GetType("Mono.Runtime") != null ? ((ISymbolReaderProvider)(new MdbReaderProvider())) : ((ISymbolReaderProvider)new PdbReaderProvider()), + SymbolReaderProvider = GetSymbolReaderProvider(Assembly, DebugSymbols), AssemblyResolver = resolver })) { foreach (var module in assemblyDefinition.Modules) { @@ -146,7 +146,7 @@ namespace Xamarin.Forms.Build.Tasks } Logger.LogString(1, "Writing the assembly... "); assemblyDefinition.Write(new WriterParameters { - SymbolWriterProvider = System.Type.GetType("Mono.Runtime") != null ? ((ISymbolWriterProvider)(new MdbWriterProvider())) : ((ISymbolWriterProvider)new MdbWriterProvider()), + SymbolWriterProvider = GetSymbolWriterProvider(Assembly, DebugSymbols), WriteSymbols = DebugSymbols }); } diff --git a/Xamarin.Forms.Build.Tasks/XamlCTask.cs b/Xamarin.Forms.Build.Tasks/XamlCTask.cs index 051eac0f..d014d059 100644 --- a/Xamarin.Forms.Build.Tasks/XamlCTask.cs +++ b/Xamarin.Forms.Build.Tasks/XamlCTask.cs @@ -5,8 +5,6 @@ using System.Linq; using Mono.Cecil; using Mono.Cecil.Cil; -using Mono.Cecil.Mdb; -using Mono.Cecil.Pdb; using Xamarin.Forms.Xaml; @@ -74,7 +72,7 @@ namespace Xamarin.Forms.Build.Tasks AssemblyResolver = resolver, ReadWrite = !ReadOnly, ReadSymbols = DebugSymbols, - SymbolReaderProvider = DebugSymbols ? (System.Type.GetType("Mono.Runtime") != null ? ((ISymbolReaderProvider)(new MdbReaderProvider())) : ((ISymbolReaderProvider)new PdbReaderProvider())) : null, + SymbolReaderProvider = GetSymbolReaderProvider(Assembly, DebugSymbols), }; using (var assemblyDefinition = AssemblyDefinition.ReadAssembly(Path.GetFullPath(Assembly),readerParameters)) { @@ -228,7 +226,7 @@ namespace Xamarin.Forms.Build.Tasks try { assemblyDefinition.Write(new WriterParameters { WriteSymbols = DebugSymbols, - SymbolWriterProvider = DebugSymbols ? (System.Type.GetType("Mono.Runtime") != null ? ((ISymbolWriterProvider)(new MdbWriterProvider())) : ((ISymbolWriterProvider)new MdbWriterProvider())): null, + SymbolWriterProvider = GetSymbolWriterProvider(Assembly, DebugSymbols), }); Logger.LogLine(1, "done."); } catch (Exception e) { diff --git a/Xamarin.Forms.Build.Tasks/XamlTask.cs b/Xamarin.Forms.Build.Tasks/XamlTask.cs index 0456d9f3..9bfc87cf 100644 --- a/Xamarin.Forms.Build.Tasks/XamlTask.cs +++ b/Xamarin.Forms.Build.Tasks/XamlTask.cs @@ -11,6 +11,8 @@ using Mono.Cecil; using Xamarin.Forms.Xaml; using Mono.Cecil.Cil; +using Mono.Cecil.Pdb; +using Mono.Cecil.Mdb; namespace Xamarin.Forms.Build.Tasks { @@ -58,6 +60,56 @@ namespace Xamarin.Forms.Build.Tasks } return rootnode; } + + protected static ISymbolReaderProvider GetSymbolReaderProvider(string moduleFileName, bool debugSymbols) + { + if (!debugSymbols) + return null; + + var pdb_name = GetPdbFileName(moduleFileName); + if (File.Exists(pdb_name)) { + // TODO: check mvid match + return new PdbReaderProvider(); + } + + var mdb_name = GetMdbFileName(moduleFileName); + if (File.Exists(mdb_name)) { + // TODO: check mvid match + return new MdbReaderProvider(); + } + + return null; + } + + protected static ISymbolWriterProvider GetSymbolWriterProvider(string moduleFileName, bool debugSymbols) + { + if (!debugSymbols) + return null; + + var pdb_name = GetPdbFileName(moduleFileName); + if (File.Exists(pdb_name)) { + // TODO: check mvid match + return new PdbWriterProvider(); + } + + var mdb_name = GetMdbFileName(moduleFileName); + if (File.Exists(mdb_name)) { + // TODO: check mvid match + return new MdbWriterProvider(); + } + + return null; + } + + static string GetPdbFileName(string assemblyFileName) + { + return Path.ChangeExtension(assemblyFileName, ".pdb"); + } + + static string GetMdbFileName(string assemblyFileName) + { + return assemblyFileName + ".mdb"; + } } static class CecilExtensions -- cgit v1.2.3