77 строки
1.7 KiB
C#
77 строки
1.7 KiB
C#
using System;
|
|
using System.Text;
|
|
using System.Collections.Generic;
|
|
|
|
using Microsoft.Build.Framework;
|
|
using Microsoft.Build.Utilities;
|
|
|
|
namespace Xamarin.MacDev.Tasks
|
|
{
|
|
public abstract class PackLibraryResourcesTaskBase : Task
|
|
{
|
|
#region Inputs
|
|
|
|
public string SessionId { get; set; }
|
|
|
|
[Required]
|
|
public string Prefix { get; set; }
|
|
|
|
public ITaskItem[] BundleResourcesWithLogicalNames { get; set; }
|
|
|
|
#endregion
|
|
|
|
#region Outputs
|
|
|
|
[Output]
|
|
public ITaskItem[] EmbeddedResources { get; set; }
|
|
|
|
#endregion
|
|
|
|
static string EscapeMangledResource (string name)
|
|
{
|
|
var mangled = new StringBuilder ();
|
|
|
|
for (int i = 0; i < name.Length; i++) {
|
|
switch (name[i]) {
|
|
case '\\': mangled.Append ("_b"); break;
|
|
case '/': mangled.Append ("_f"); break;
|
|
case '_': mangled.Append ("__"); break;
|
|
default: mangled.Append (name[i]); break;
|
|
}
|
|
}
|
|
|
|
return mangled.ToString ();
|
|
}
|
|
|
|
public override bool Execute ()
|
|
{
|
|
var results = new List<ITaskItem> ();
|
|
|
|
Log.LogTaskName ("PackLibraryResources");
|
|
Log.LogTaskProperty ("BundleResourcesWithLogicalNames", BundleResourcesWithLogicalNames);
|
|
Log.LogTaskProperty ("Prefix", Prefix);
|
|
|
|
if (BundleResourcesWithLogicalNames != null) {
|
|
foreach (var item in BundleResourcesWithLogicalNames) {
|
|
var logicalName = item.GetMetadata ("LogicalName");
|
|
|
|
if (string.IsNullOrEmpty (logicalName)) {
|
|
Log.LogError ("Items must have logical names computed.");
|
|
return false;
|
|
}
|
|
|
|
var embedded = new TaskItem (item);
|
|
|
|
embedded.SetMetadata ("LogicalName", "__" + Prefix + "_content_" + EscapeMangledResource (logicalName));
|
|
|
|
results.Add (embedded);
|
|
}
|
|
}
|
|
|
|
EmbeddedResources = results.ToArray ();
|
|
|
|
return !Log.HasLoggedErrors;
|
|
}
|
|
}
|
|
}
|