csharpc-sharpdotnetxamlavaloniauicross-platformcross-platform-xamlavaloniaguimulti-platformuser-interfacedotnetcore
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
88 lines
3.1 KiB
88 lines
3.1 KiB
using System;
|
|
using System.Diagnostics;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Reflection;
|
|
using System.Threading;
|
|
using Microsoft.Build.Framework;
|
|
|
|
namespace Avalonia.Build.Tasks
|
|
{
|
|
public class CompileAvaloniaXamlTask: ITask
|
|
{
|
|
public bool Execute()
|
|
{
|
|
Enum.TryParse(ReportImportance, true, out MessageImportance outputImportance);
|
|
|
|
OutputPath = OutputPath ?? AssemblyFile;
|
|
var outputPdb = GetPdbPath(OutputPath);
|
|
var input = AssemblyFile;
|
|
var inputPdb = GetPdbPath(input);
|
|
// Make a copy and delete the original file to prevent MSBuild from thinking that everything is OK
|
|
if (OriginalCopyPath != null)
|
|
{
|
|
File.Copy(AssemblyFile, OriginalCopyPath, true);
|
|
input = OriginalCopyPath;
|
|
File.Delete(AssemblyFile);
|
|
|
|
if (File.Exists(inputPdb))
|
|
{
|
|
var copyPdb = GetPdbPath(OriginalCopyPath);
|
|
File.Copy(inputPdb, copyPdb, true);
|
|
File.Delete(inputPdb);
|
|
inputPdb = copyPdb;
|
|
}
|
|
}
|
|
|
|
var msg = $"CompileAvaloniaXamlTask -> AssemblyFile:{AssemblyFile}, ProjectDirectory:{ProjectDirectory}, OutputPath:{OutputPath}";
|
|
BuildEngine.LogMessage(msg, outputImportance < MessageImportance.Low ? MessageImportance.High : outputImportance);
|
|
|
|
var res = XamlCompilerTaskExecutor.Compile(BuildEngine, input,
|
|
File.ReadAllLines(ReferencesFilePath).Where(l => !string.IsNullOrWhiteSpace(l)).ToArray(),
|
|
ProjectDirectory, OutputPath, VerifyIl, outputImportance,
|
|
(SignAssembly && !DelaySign) ? AssemblyOriginatorKeyFile : null
|
|
);
|
|
if (!res.Success)
|
|
return false;
|
|
if (!res.WrittenFile)
|
|
{
|
|
File.Copy(input, OutputPath, true);
|
|
if(File.Exists(inputPdb))
|
|
File.Copy(inputPdb, outputPdb, true);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
string GetPdbPath(string p)
|
|
{
|
|
var d = Path.GetDirectoryName(p);
|
|
var f = Path.GetFileNameWithoutExtension(p);
|
|
var rv = f + ".pdb";
|
|
if (d != null)
|
|
rv = Path.Combine(d, rv);
|
|
return rv;
|
|
}
|
|
|
|
[Required]
|
|
public string AssemblyFile { get; set; }
|
|
[Required]
|
|
public string ReferencesFilePath { get; set; }
|
|
[Required]
|
|
public string OriginalCopyPath { get; set; }
|
|
[Required]
|
|
public string ProjectDirectory { get; set; }
|
|
|
|
public string OutputPath { get; set; }
|
|
|
|
public bool VerifyIl { get; set; }
|
|
|
|
public string AssemblyOriginatorKeyFile { get; set; }
|
|
public bool SignAssembly { get; set; }
|
|
public bool DelaySign { get; set; }
|
|
|
|
public string ReportImportance { get; set; }
|
|
|
|
public IBuildEngine BuildEngine { get; set; }
|
|
public ITaskHost HostObject { get; set; }
|
|
}
|
|
}
|
|
|