var ta = assemblies.FirstOrDefault (a => a.AssemblyFile.Equals (ut.AssemblyFile, StringComparison.OrdinalIgnoreCase) || a.AssemblyName.Equals (ut.AssemblyName, StringComparison.OrdinalIgnoreCase));
if (ta == null) {
ta = new TaskAssembly () { AssemblyName = ut.AssemblyName, AssemblyFile = ut.AssemblyFile };
- ta.LoadedAssembly = ta.AssemblyName != null ? Assembly.Load (ta.AssemblyName) : Assembly.LoadFile (ta.AssemblyFile);
+ ta.LoadedAssembly = !string.IsNullOrEmpty (ta.AssemblyName) ? Assembly.Load (ta.AssemblyName) : Assembly.LoadFile (ta.AssemblyFile);
assemblies.Add (ta);
}
var pg = ut.ParameterGroup == null ? null : ut.ParameterGroup.Parameters.Select (p => new TaskPropertyInfo (p.Name, Type.GetType (p.ParameterType), cond (p.Output), cond (p.Required)))
using Microsoft.Build.Execution;
using NUnit.Framework;
using Microsoft.Build.Evaluation;
+using Microsoft.Build.Utilities;
+using Microsoft.Build.Framework;
+using Microsoft.Build.Logging;
namespace MonoTests.Microsoft.Build.Execution
{
var proj = new ProjectInstance (root);
Assert.AreEqual ("y", proj.GetPropertyValue ("X"), "#1");
}
+
+ [Test]
+ public void FirstUsingTaskTakesPrecedence1 ()
+ {
+ FirstUsingTaskTakesPrecedenceCommon (false, false);
+ }
+
+ [Test]
+ public void FirstUsingTaskTakesPrecedence2 ()
+ {
+ FirstUsingTaskTakesPrecedenceCommon (true, true);
+ }
+
+ public void FirstUsingTaskTakesPrecedenceCommon (bool importFirst, bool buildShouldSucceed)
+ {
+ string thisAssembly = GetType ().Assembly.GetName ().Name;
+ string filename = "Test/ProjectTargetInstanceTest.FirstUsingTaskTakesPrecedence.Import.proj";
+ string imported_xml = string.Format (@"<Project DefaultTargets='Foo' xmlns='http://schemas.microsoft.com/developer/msbuild/2003'>
+ <UsingTask TaskName='MonoTests.Microsoft.Build.Execution.MyTask' AssemblyFile='{0}.dll' />
+</Project>", thisAssembly);
+ string usingTask = string.Format ("<UsingTask TaskName='MonoTests.Microsoft.Build.Execution.SubNamespace.MyTask' AssemblyFile='{0}.dll' />", thisAssembly);
+ string import = string.Format ("<Import Project='{0}' />", filename);
+ string project_xml = string.Format (@"<Project DefaultTargets='Foo' xmlns='http://schemas.microsoft.com/developer/msbuild/2003'>
+ {0}
+ {1}
+ <Target Name='Foo'>
+ <MyTask />
+ </Target>
+</Project>",
+ importFirst ? import : usingTask, importFirst ? usingTask : import);
+ try {
+ File.WriteAllText (filename, imported_xml);
+ var xml = XmlReader.Create (new StringReader (project_xml));
+ var root = ProjectRootElement.Create (xml);
+ Assert.IsTrue (root.UsingTasks.All (u => !string.IsNullOrEmpty (u.AssemblyFile)), "#1");
+ Assert.IsTrue (root.UsingTasks.All (u => string.IsNullOrEmpty (u.AssemblyName)), "#2");
+ root.FullPath = "ProjectTargetInstanceTest.FirstUsingTaskTakesPrecedence.proj";
+ var proj = new ProjectInstance (root);
+ Assert.AreEqual (buildShouldSucceed, proj.Build (), "#3");
+ } finally {
+ File.Delete (filename);
+ }
+ }
+ }
+
+ namespace SubNamespace
+ {
+ public class MyTask : Task
+ {
+ public override bool Execute ()
+ {
+ return false;
+ }
+ }
+ }
+
+ public class MyTask : Task
+ {
+ public override bool Execute ()
+ {
+ return true;
+ }
}
}