Skip to content

Commit ac9ea09

Browse files
authored
Revert IBuildEngine.ProjectFileOfTaskNode use. (#201)
Reverts: 47f95ab Reverts: 76c076f Context: dotnet/android#7685 (comment) The problem is that we misunderstood [`IBuildEngine.ProjectFileOfTaskNode`][0]: we *thought* (hoped?) that it would return `$(MSBuildProjectFullPath)`, the path to the `.csproj` being built. In actuality it returns `$(MSBuildThisFileFullPath)` for the file containing the Task invocation. Meaning if e.g. `Xamarin.Android.Common.targets` contains the Task invocation, then IBuildEngine.ProjectFileOfTaskNode` would be the path to `Xamarin.Android.Common.targets`, *not* the path of the `.csproj`. This in turn means it doesn't actually solve the problem we had. We will instead need to audit all use of `IBuildEngine4.RegisterTaskObject()` & related to ensure that the keys provided *also* contain paths to project-specific files, if necessary. Revert 47f95ab and 76c076f, as the changes are not needed. [0]: https://learn.microsoft.com/en-us/dotnet/api/microsoft.build.framework.ibuildengine.projectfileoftasknode?view=msbuild-17-netcore
1 parent 47f95ab commit ac9ea09

File tree

1 file changed

+6
-59
lines changed

1 file changed

+6
-59
lines changed

src/Microsoft.Android.Build.BaseTasks/MSBuildExtensions.cs

Lines changed: 6 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,6 @@
1313

1414
namespace Microsoft.Android.Build.Tasks
1515
{
16-
[Flags]
17-
public enum RegisterTaskObjectKeyFlags {
18-
None = 0,
19-
IncludeProjectFile = 1 << 0,
20-
}
21-
2216
public static class MSBuildExtensions
2317
{
2418
public static void LogDebugMessage (this TaskLoggingHelper log, string message, params object[] messageArgs)
@@ -259,80 +253,33 @@ public static void SetDestinationSubPath (this ITaskItem assembly)
259253
/// IBuildEngine4.RegisterTaskObject, but adds the current assembly path into the key
260254
/// </summary>
261255
public static void RegisterTaskObjectAssemblyLocal (this IBuildEngine4 engine, object key, object value, RegisteredTaskObjectLifetime lifetime, bool allowEarlyCollection = false) =>
262-
RegisterTaskObjectAssemblyLocal (engine, key, value, lifetime, allowEarlyCollection: false, flags: RegisterTaskObjectKeyFlags.IncludeProjectFile);
263-
264-
/// <summary>
265-
/// IBuildEngine4.RegisterTaskObject, but adds the current assembly path into the key
266-
/// </summary>
267-
public static void RegisterTaskObjectAssemblyLocal (this IBuildEngine4 engine, object key, object value, RegisteredTaskObjectLifetime lifetime, RegisterTaskObjectKeyFlags flags) =>
268-
engine.RegisterTaskObject (engine.GetKey (AssemblyLocation, key, flags), value, lifetime, allowEarlyCollection: false);
269-
270-
/// <summary>
271-
/// IBuildEngine4.RegisterTaskObject, but adds the current assembly path into the key
272-
/// </summary>
273-
public static void RegisterTaskObjectAssemblyLocal (this IBuildEngine4 engine, object key, object value, RegisteredTaskObjectLifetime lifetime, bool allowEarlyCollection, RegisterTaskObjectKeyFlags flags) =>
274-
engine.RegisterTaskObject (engine.GetKey (AssemblyLocation, key, flags), value, lifetime, allowEarlyCollection);
256+
engine.RegisterTaskObject ((AssemblyLocation, key), value, lifetime, allowEarlyCollection);
275257

276258
/// <summary>
277259
/// IBuildEngine4.GetRegisteredTaskObject, but adds the current assembly path into the key
278260
/// </summary>
279261
public static object GetRegisteredTaskObjectAssemblyLocal (this IBuildEngine4 engine, object key, RegisteredTaskObjectLifetime lifetime) =>
280-
GetRegisteredTaskObjectAssemblyLocal (engine, key, lifetime, flags: RegisterTaskObjectKeyFlags.IncludeProjectFile);
281-
282-
/// <summary>
283-
/// IBuildEngine4.GetRegisteredTaskObject, but adds the current assembly path into the key
284-
/// </summary>
285-
public static object GetRegisteredTaskObjectAssemblyLocal (this IBuildEngine4 engine, object key, RegisteredTaskObjectLifetime lifetime, RegisterTaskObjectKeyFlags flags) =>
286-
engine.GetRegisteredTaskObject (engine.GetKey (AssemblyLocation, key, flags), lifetime);
287-
262+
engine.GetRegisteredTaskObject ((AssemblyLocation, key), lifetime);
288263

289264
/// <summary>
290265
/// Generic version of IBuildEngine4.GetRegisteredTaskObject, but adds the current assembly path into the key
291266
/// </summary>
292267
public static T GetRegisteredTaskObjectAssemblyLocal<T> (this IBuildEngine4 engine, object key, RegisteredTaskObjectLifetime lifetime)
293-
where T : class => GetRegisteredTaskObjectAssemblyLocal<T> (engine, key, lifetime, flags: RegisterTaskObjectKeyFlags.IncludeProjectFile);
294-
295-
/// <summary>
296-
/// Generic version of IBuildEngine4.GetRegisteredTaskObject, but adds the current assembly path into the key
297-
/// </summary>
298-
public static T GetRegisteredTaskObjectAssemblyLocal<T> (this IBuildEngine4 engine, object key, RegisteredTaskObjectLifetime lifetime, RegisterTaskObjectKeyFlags flags)
299268
where T : class =>
300-
engine.GetRegisteredTaskObject (engine.GetKey (AssemblyLocation, key, flags), lifetime) as T;
269+
engine.GetRegisteredTaskObject ((AssemblyLocation, key), lifetime) as T;
301270

302-
/// <summary>
303-
/// IBuildEngine4.UnregisterTaskObject, but adds the current assembly path into the key
304-
/// </summary>
305-
public static object UnregisterTaskObjectAssemblyLocal (this IBuildEngine4 engine, object key, RegisteredTaskObjectLifetime lifetime) =>
306-
UnregisterTaskObjectAssemblyLocal (engine, key, lifetime, flags: RegisterTaskObjectKeyFlags.IncludeProjectFile);
307271

308272
/// <summary>
309273
/// IBuildEngine4.UnregisterTaskObject, but adds the current assembly path into the key
310274
/// </summary>
311-
public static object UnregisterTaskObjectAssemblyLocal (this IBuildEngine4 engine, object key, RegisteredTaskObjectLifetime lifetime, RegisterTaskObjectKeyFlags flags) =>
312-
engine.UnregisterTaskObject (engine.GetKey (AssemblyLocation, key, flags), lifetime);
275+
public static object UnregisterTaskObjectAssemblyLocal (this IBuildEngine4 engine, object key, RegisteredTaskObjectLifetime lifetime) =>
276+
engine.UnregisterTaskObject ((AssemblyLocation, key), lifetime);
313277

314278
/// <summary>
315279
/// Generic version of IBuildEngine4.UnregisterTaskObject, but adds the current assembly path into the key
316280
/// </summary>
317281
public static T UnregisterTaskObjectAssemblyLocal<T> (this IBuildEngine4 engine, object key, RegisteredTaskObjectLifetime lifetime)
318-
where T : class => UnregisterTaskObjectAssemblyLocal<T> (engine, key, lifetime, flags: RegisterTaskObjectKeyFlags.IncludeProjectFile);
319-
320-
/// <summary>
321-
/// Generic version of IBuildEngine4.UnregisterTaskObject, but adds the current assembly path into the key
322-
/// </summary>
323-
public static T UnregisterTaskObjectAssemblyLocal<T> (this IBuildEngine4 engine, object key, RegisteredTaskObjectLifetime lifetime, RegisterTaskObjectKeyFlags flags)
324282
where T : class =>
325-
engine.UnregisterTaskObject (engine.GetKey (AssemblyLocation, key, flags), lifetime) as T;
326-
327-
/// <summary>
328-
/// Method to calculate the key for the RegisterTaskObject. This is based on the
329-
/// RegisterTaskObjectKeyFlags which are passed.
330-
/// </summary>
331-
static object GetKey (this IBuildEngine4 engine, string location, object key, RegisterTaskObjectKeyFlags flags)
332-
{
333-
return ((flags & RegisterTaskObjectKeyFlags.IncludeProjectFile) != 0)
334-
? (location, key, engine.ProjectFileOfTaskNode)
335-
: (location, key, string.Empty);
336-
}
283+
engine.UnregisterTaskObject ((AssemblyLocation, key), lifetime) as T;
337284
}
338285
}

0 commit comments

Comments
 (0)