[XamlC] support portable pdb (#726)
authorStephane Delcroix <stephane@delcroix.org>
Mon, 6 Feb 2017 08:33:18 +0000 (09:33 +0100)
committerGitHub <noreply@github.com>
Mon, 6 Feb 2017 08:33:18 +0000 (09:33 +0100)
Xamarin.Forms.Build.Tasks/DebugXamlCTask.cs
Xamarin.Forms.Build.Tasks/XamlCTask.cs
Xamarin.Forms.Build.Tasks/XamlTask.cs

index 1c7acac..d356c9c 100644 (file)
@@ -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
                                });
                        }
index 051eac0..d014d05 100644 (file)
@@ -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) {
index 0456d9f..9bfc87c 100644 (file)
@@ -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