diff options
author | Martin Baulig <martin.baulig@xamarin.com> | 2013-12-04 04:42:10 +0400 |
---|---|---|
committer | Martin Baulig <martin.baulig@xamarin.com> | 2013-12-04 04:58:06 +0400 |
commit | 0d0f4ae035a40f88ab10ae626a9a6fc7fd792e0c (patch) | |
tree | cc0dc5e23cd74d31077e6b07d5a644340356fe79 /mcs/class/Microsoft.Build.Engine | |
parent | 305ce0e3824b449c1a62ae58be199dc4740c1c8f (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')
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> |