diff options
author | Stephane Delcroix <stephane@delcroix.org> | 2017-02-06 09:33:18 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-02-06 09:33:18 +0100 |
commit | bfb5de5676fd08059d4c86402ab89e7fa2376bd9 (patch) | |
tree | 55478e219bd4e728f22e02ac2877962537680623 /Xamarin.Forms.Build.Tasks | |
parent | 5af224a1e7679a618149ecac2aa0d8b7eb6cb629 (diff) | |
download | xamarin-forms-bfb5de5676fd08059d4c86402ab89e7fa2376bd9.tar.gz xamarin-forms-bfb5de5676fd08059d4c86402ab89e7fa2376bd9.tar.bz2 xamarin-forms-bfb5de5676fd08059d4c86402ab89e7fa2376bd9.zip |
[XamlC] support portable pdb (#726)
Diffstat (limited to 'Xamarin.Forms.Build.Tasks')
-rw-r--r-- | Xamarin.Forms.Build.Tasks/DebugXamlCTask.cs | 4 | ||||
-rw-r--r-- | Xamarin.Forms.Build.Tasks/XamlCTask.cs | 6 | ||||
-rw-r--r-- | Xamarin.Forms.Build.Tasks/XamlTask.cs | 52 |
3 files changed, 56 insertions, 6 deletions
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 |