Browse Source

Write directly to a file so it has associated pdb path

xamlil-debug-info
Nikita Tsukanov 7 years ago
parent
commit
c1160247f0
  1. 11
      src/Avalonia.Build.Tasks/CompileAvaloniaXamlTask.cs
  2. 20
      src/Avalonia.Build.Tasks/XamlCompilerTaskExecutor.cs

11
src/Avalonia.Build.Tasks/CompileAvaloniaXamlTask.cs

@ -34,22 +34,15 @@ namespace Avalonia.Build.Tasks
var res = XamlCompilerTaskExecutor.Compile(BuildEngine, input, var res = XamlCompilerTaskExecutor.Compile(BuildEngine, input,
File.ReadAllLines(ReferencesFilePath).Where(l => !string.IsNullOrWhiteSpace(l)).ToArray(), File.ReadAllLines(ReferencesFilePath).Where(l => !string.IsNullOrWhiteSpace(l)).ToArray(),
ProjectDirectory); ProjectDirectory, OutputPath);
if (!res.Success) if (!res.Success)
return false; return false;
if (res.Data == null) if (!res.WrittenFile)
{ {
File.Copy(input, OutputPath, true); File.Copy(input, OutputPath, true);
if(File.Exists(inputPdb)) if(File.Exists(inputPdb))
File.Copy(inputPdb, OutputPath, true); File.Copy(inputPdb, OutputPath, true);
} }
else
{
File.WriteAllBytes(OutputPath, res.Data);
if (res.Symbols != null)
File.WriteAllBytes(outputPdb, res.Symbols);
}
return true; return true;
} }

20
src/Avalonia.Build.Tasks/XamlCompilerTaskExecutor.cs

@ -29,18 +29,17 @@ namespace Avalonia.Build.Tasks
public class CompileResult public class CompileResult
{ {
public bool Success { get; set; } public bool Success { get; set; }
public byte[] Data { get; set; } public bool WrittenFile { get; }
public byte[] Symbols { get; }
public CompileResult(bool success, byte[] data = null, byte[] symbols = null) public CompileResult(bool success, bool writtenFile = false)
{ {
Success = success; Success = success;
Data = data; WrittenFile = writtenFile;
Symbols = symbols;
} }
} }
public static CompileResult Compile(IBuildEngine engine, string input, string[] references, string projectDirectory) public static CompileResult Compile(IBuildEngine engine, string input, string[] references, string projectDirectory,
string output)
{ {
var typeSystem = new CecilTypeSystem(references.Concat(new[] {input}), input); var typeSystem = new CecilTypeSystem(references.Concat(new[] {input}), input);
var asm = typeSystem.TargetAssemblyDefinition; var asm = typeSystem.TargetAssemblyDefinition;
@ -284,16 +283,13 @@ namespace Avalonia.Build.Tasks
loaderDispatcherMethod.Body.Instructions.Add(Instruction.Create(OpCodes.Ldnull)); loaderDispatcherMethod.Body.Instructions.Add(Instruction.Create(OpCodes.Ldnull));
loaderDispatcherMethod.Body.Instructions.Add(Instruction.Create(OpCodes.Ret)); loaderDispatcherMethod.Body.Instructions.Add(Instruction.Create(OpCodes.Ret));
var ms = new MemoryStream(); asm.Write(output, new WriterParameters
var symbolStream = new MemoryStream();
asm.Write(ms, new WriterParameters
{ {
SymbolStream = symbolStream,
WriteSymbols = true, WriteSymbols = true,
SymbolWriterProvider = new PortablePdbWriterProvider() SymbolWriterProvider = new PortablePdbWriterProvider(),
}); });
return new CompileResult(true, ms.ToArray(), symbolStream.Length == 0 ? null : symbolStream.ToArray()); return new CompileResult(true, true);
} }
} }

Loading…
Cancel
Save