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) {
}
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
});
}
using Mono.Cecil;
using Mono.Cecil.Cil;
-using Mono.Cecil.Mdb;
-using Mono.Cecil.Pdb;
using Xamarin.Forms.Xaml;
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)) {
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) {
using Xamarin.Forms.Xaml;
using Mono.Cecil.Cil;
+using Mono.Cecil.Pdb;
+using Mono.Cecil.Mdb;
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