diff --git a/src/Microsoft.Android.Build.BaseTasks/MSBuildExtensions.cs b/src/Microsoft.Android.Build.BaseTasks/MSBuildExtensions.cs
index d50b3d9..757b754 100644
--- a/src/Microsoft.Android.Build.BaseTasks/MSBuildExtensions.cs
+++ b/src/Microsoft.Android.Build.BaseTasks/MSBuildExtensions.cs
@@ -13,6 +13,12 @@
namespace Microsoft.Android.Build.Tasks
{
+ [Flags]
+ public enum RegisterTaskObjectKeyFlags {
+ None = 0,
+ IncludeProjectFile = 1 << 0,
+ }
+
public static class MSBuildExtensions
{
public static void LogDebugMessage (this TaskLoggingHelper log, string message, params object[] messageArgs)
@@ -252,34 +258,80 @@ public static void SetDestinationSubPath (this ITaskItem assembly)
///
/// IBuildEngine4.RegisterTaskObject, but adds the current assembly path into the key
///
+ [Obsolete ("Use RegisterTaskObjectAssemblyLocal (engine, key, value, allowEarlyCollection, lifetime, flags) instead.")]
public static void RegisterTaskObjectAssemblyLocal (this IBuildEngine4 engine, object key, object value, RegisteredTaskObjectLifetime lifetime, bool allowEarlyCollection = false) =>
- engine.RegisterTaskObject ((AssemblyLocation, key), value, lifetime, allowEarlyCollection);
+ RegisterTaskObjectAssemblyLocal (engine, key, value, lifetime, allowEarlyCollection: false, flags: RegisterTaskObjectKeyFlags.IncludeProjectFile);
+
+ ///
+ /// IBuildEngine4.RegisterTaskObject, but adds the current assembly path into the key
+ ///
+ public static void RegisterTaskObjectAssemblyLocal (this IBuildEngine4 engine, object key, object value, RegisteredTaskObjectLifetime lifetime, bool allowEarlyCollection = false, RegisterTaskObjectKeyFlags flags = RegisterTaskObjectKeyFlags.IncludeProjectFile) =>
+ engine.RegisterTaskObject (engine.GetKey (AssemblyLocation, key, flags), value, lifetime, allowEarlyCollection);
///
/// IBuildEngine4.GetRegisteredTaskObject, but adds the current assembly path into the key
///
+ [Obsolete ("Use GetRegisteredTaskObjectAssemblyLocal (engine, key, lifetime, flags) instead.")]
public static object GetRegisteredTaskObjectAssemblyLocal (this IBuildEngine4 engine, object key, RegisteredTaskObjectLifetime lifetime) =>
- engine.GetRegisteredTaskObject ((AssemblyLocation, key), lifetime);
+ GetRegisteredTaskObjectAssemblyLocal (engine, key, lifetime, flags: RegisterTaskObjectKeyFlags.IncludeProjectFile);
+
+ ///
+ /// IBuildEngine4.GetRegisteredTaskObject, but adds the current assembly path into the key
+ ///
+ public static object GetRegisteredTaskObjectAssemblyLocal (this IBuildEngine4 engine, object key, RegisteredTaskObjectLifetime lifetime, RegisterTaskObjectKeyFlags flags = RegisterTaskObjectKeyFlags.IncludeProjectFile) =>
+ engine.GetRegisteredTaskObject (engine.GetKey (AssemblyLocation, key, flags), lifetime);
+
///
/// Generic version of IBuildEngine4.GetRegisteredTaskObject, but adds the current assembly path into the key
///
+ [Obsolete ("Use GetRegisteredTaskObjectAssemblyLocal (engine, key, lifetime, flags) instead.")]
public static T GetRegisteredTaskObjectAssemblyLocal (this IBuildEngine4 engine, object key, RegisteredTaskObjectLifetime lifetime)
- where T : class =>
- engine.GetRegisteredTaskObject ((AssemblyLocation, key), lifetime) as T;
+ where T : class => GetRegisteredTaskObjectAssemblyLocal (engine, key, lifetime, flags: RegisterTaskObjectKeyFlags.IncludeProjectFile);
+ ///
+ /// Generic version of IBuildEngine4.GetRegisteredTaskObject, but adds the current assembly path into the key
+ ///
+ public static T GetRegisteredTaskObjectAssemblyLocal (this IBuildEngine4 engine, object key, RegisteredTaskObjectLifetime lifetime, RegisterTaskObjectKeyFlags flags = RegisterTaskObjectKeyFlags.IncludeProjectFile)
+ where T : class =>
+ engine.GetRegisteredTaskObject (engine.GetKey (AssemblyLocation, key, flags), lifetime) as T;
///
/// IBuildEngine4.UnregisterTaskObject, but adds the current assembly path into the key
///
+ [Obsolete ("Use UnregisterTaskObjectAssemblyLocal (engine, key, lifetime, flags) instead.")]
public static object UnregisterTaskObjectAssemblyLocal (this IBuildEngine4 engine, object key, RegisteredTaskObjectLifetime lifetime) =>
- engine.UnregisterTaskObject ((AssemblyLocation, key), lifetime);
+ UnregisterTaskObjectAssemblyLocal (engine, key, lifetime, flags: RegisterTaskObjectKeyFlags.IncludeProjectFile);
+
+ ///
+ /// IBuildEngine4.UnregisterTaskObject, but adds the current assembly path into the key
+ ///
+ public static object UnregisterTaskObjectAssemblyLocal (this IBuildEngine4 engine, object key, RegisteredTaskObjectLifetime lifetime, RegisterTaskObjectKeyFlags flags = RegisterTaskObjectKeyFlags.IncludeProjectFile) =>
+ engine.UnregisterTaskObject (engine.GetKey (AssemblyLocation, key, flags), lifetime);
///
/// Generic version of IBuildEngine4.UnregisterTaskObject, but adds the current assembly path into the key
///
+ [Obsolete ("Use UnregisterTaskObjectAssemblyLocal (engine, key, lifetime, flags) instead.")]
public static T UnregisterTaskObjectAssemblyLocal (this IBuildEngine4 engine, object key, RegisteredTaskObjectLifetime lifetime)
+ where T : class => UnregisterTaskObjectAssemblyLocal (engine, key, lifetime, flags: RegisterTaskObjectKeyFlags.IncludeProjectFile);
+
+ ///
+ /// Generic version of IBuildEngine4.UnregisterTaskObject, but adds the current assembly path into the key
+ ///
+ public static T UnregisterTaskObjectAssemblyLocal (this IBuildEngine4 engine, object key, RegisteredTaskObjectLifetime lifetime, RegisterTaskObjectKeyFlags flags = RegisterTaskObjectKeyFlags.IncludeProjectFile)
where T : class =>
- engine.UnregisterTaskObject ((AssemblyLocation, key), lifetime) as T;
+ engine.UnregisterTaskObject (engine.GetKey (AssemblyLocation, key, flags), lifetime) as T;
+
+ ///
+ /// Method to calculate the key for the RegisterTaskObject. This is based on the
+ /// RegisterTaskObjectKeyFlags which are passed.
+ ///
+ static object GetKey (this IBuildEngine4 engine, string location, object key, RegisterTaskObjectKeyFlags flags)
+ {
+ return ((flags & RegisterTaskObjectKeyFlags.IncludeProjectFile) != 0)
+ ? (location, key, engine.ProjectFileOfTaskNode)
+ : (location, key, string.Empty);
+ }
}
}