Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Baulig <martin.baulig@xamarin.com>2013-12-04 04:42:10 +0400
committerMartin Baulig <martin.baulig@xamarin.com>2013-12-04 04:58:06 +0400
commit0d0f4ae035a40f88ab10ae626a9a6fc7fd792e0c (patch)
treecc0dc5e23cd74d31077e6b07d5a644340356fe79 /mcs/class/Microsoft.Build.Engine
parent305ce0e3824b449c1a62ae58be199dc4740c1c8f (diff)
[xbuild]: Check a <Target>'s "Returns" first, then fall-back to "Outputs".
This fixes a problem with the "Microsoft.Bcl.Build" NuGet package, which overrides the "GetTargetPath" target in a custom .targets file and uses "Returns" instead of "Outputs".
Diffstat (limited to 'mcs/class/Microsoft.Build.Engine')
-rw-r--r--mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/Target.cs9
-rw-r--r--mcs/class/Microsoft.Build.Engine/Test/Microsoft.Build.BuildEngine/TargetTest.cs21
-rw-r--r--mcs/class/Microsoft.Build.Engine/Test/resources/TestReturns.csproj13
3 files changed, 40 insertions, 3 deletions
diff --git a/mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/Target.cs b/mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/Target.cs
index d0011305399..630cb4a46e1 100644
--- a/mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/Target.cs
+++ b/mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/Target.cs
@@ -411,9 +411,12 @@ namespace Microsoft.Build.BuildEngine {
ITaskItem [] OutputsAsITaskItems {
get {
- string outputs = targetElement.GetAttribute ("Outputs");
- if (outputs == String.Empty)
- return new ITaskItem [0];
+ var outputs = targetElement.GetAttribute ("Returns");
+ if (string.IsNullOrEmpty (outputs)) {
+ outputs = targetElement.GetAttribute ("Outputs");
+ if (string.IsNullOrEmpty (outputs))
+ return new ITaskItem [0];
+ }
Expression e = new Expression ();
e.Parse (outputs, ParseOptions.AllowItemsNoMetadataAndSplit);
diff --git a/mcs/class/Microsoft.Build.Engine/Test/Microsoft.Build.BuildEngine/TargetTest.cs b/mcs/class/Microsoft.Build.Engine/Test/Microsoft.Build.BuildEngine/TargetTest.cs
index bc09d366de5..faa959fae4e 100644
--- a/mcs/class/Microsoft.Build.Engine/Test/Microsoft.Build.BuildEngine/TargetTest.cs
+++ b/mcs/class/Microsoft.Build.Engine/Test/Microsoft.Build.BuildEngine/TargetTest.cs
@@ -963,5 +963,26 @@ namespace MonoTests.Microsoft.Build.BuildEngine {
}
#endif
+ [Test]
+ public void TestTargetReturns ()
+ {
+ engine = new Engine (Consts.BinPath);
+ project = engine.CreateNewProject ();
+ project.Load (Path.Combine ("Test", "resources", "TestReturns.csproj"));
+
+ var logger = new TestMessageLogger ();
+ engine.RegisterLogger (logger);
+
+ bool result = project.Build ("Main");
+ if (!result) {
+ logger.DumpMessages ();
+ Assert.Fail ("Build failed");
+ }
+
+ logger.CheckLoggedMessageHead ("Result: Bar", "A1");
+
+ Assert.AreEqual (0, logger.NormalMessageCount, "Unexpected extra messages found");
+ }
+
}
}
diff --git a/mcs/class/Microsoft.Build.Engine/Test/resources/TestReturns.csproj b/mcs/class/Microsoft.Build.Engine/Test/resources/TestReturns.csproj
new file mode 100644
index 00000000000..a71ea5db7e2
--- /dev/null
+++ b/mcs/class/Microsoft.Build.Engine/Test/resources/TestReturns.csproj
@@ -0,0 +1,13 @@
+<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
+
+ <Target Name="GetFoo" Outputs="Out" Returns="Bar" />
+
+ <Target Name="Main">
+ <MSBuild Projects="TestReturns.csproj" Targets="GetFoo">
+ <Output TaskParameter="TargetOutputs" ItemName="FooResult"/>
+ </MSBuild>
+
+ <Message Text="Result: %(FooResult.Identity)" />
+ </Target>
+
+</Project>