namespace Microsoft.Build.Internal
{
class BuildEngine4
-#if NET_4_5
: IBuildEngine4
-#else
- : IBuildEngine3
-#endif
{
public BuildEngine4 (BuildSubmission submission)
{
if (request.TargetNames == null)
args.Result.OverallResult = args.CheckCancel () ? BuildResultCode.Failure : args.Result.ResultsByTarget.Any (p => p.Value.ResultCode == TargetResultCode.Failure) ? BuildResultCode.Failure : BuildResultCode.Success;
else {
- foreach (var targetName in (args.TargetNames ?? request.TargetNames).Where (t => t != null))
- BuildTargetByName (targetName, args);
+ foreach (var targetName in (args.TargetNames ?? request.TargetNames).Where (t => t != null)) {
+ if (!BuildTargetByName (targetName, args))
+ break;
+ }
// FIXME: check .NET behavior, whether cancellation always results in failure.
args.Result.OverallResult = args.CheckCancel () ? BuildResultCode.Failure : args.Result.ResultsByTarget.Any (p => p.Value.ResultCode == TargetResultCode.Failure) ? BuildResultCode.Failure : BuildResultCode.Success;
// Create Task instance.
var factoryIdentityParameters = new Dictionary<string,string> ();
- #if NET_4_5
factoryIdentityParameters ["MSBuildRuntime"] = taskInstance.MSBuildRuntime;
factoryIdentityParameters ["MSBuildArchitecture"] = taskInstance.MSBuildArchitecture;
- #endif
var task = args.BuildTaskFactory.CreateTask (taskInstance.Name, factoryIdentityParameters, this);
if (task == null)
throw new InvalidOperationException (string.Format ("TaskFactory {0} returned null Task", args.BuildTaskFactory));
}
public void SetMetadataValueLiteral (string metadataName, string metadataValue)
{
- metadata [metadataName] = ProjectCollection.Unescape (metadataValue);
+ metadata [metadataName] = WindowsCompatibilityExtensions.NormalizeFilePath (ProjectCollection.Unescape (metadataValue));
}
public IDictionary CloneCustomMetadataEscaped ()
{
}
public void SetMetadata (string metadataName, string metadataValue)
{
- metadata [metadataName] = metadataValue;
+ metadata [metadataName] = WindowsCompatibilityExtensions.NormalizeFilePath (metadataValue);
}
public string ItemSpec { get; set; }
public int MetadataCount {
}
}
-#if NET_4_5
#region IBuildEngine4 implementation
// task objects are not in use anyways though...
return reg.Object;
}
#endregion
-#endif
#region IBuildEngine3 implementation
foreach (DictionaryEntry p in globalProperties)
globalPropertiesThatMakeSense [(string) p.Key] = (string) p.Value;
var projectToBuild = new ProjectInstance (ProjectRootElement.Create (XmlReader.Create (projectFileName)), globalPropertiesThatMakeSense, toolsVersion, Projects);
+ // Not very sure if ALL of these properties should be added, but some are certainly needed.
+ foreach (var p in this.project.Properties.Where (p => !globalProperties.Contains (p.Name)))
+ projectToBuild.SetProperty (p.Name, p.EvaluatedValue);
+
IDictionary<string,TargetResult> outs;
var ret = projectToBuild.Build (targetNames ?? new string [] {"Build"}, Projects.Loggers, out outs);
foreach (var p in outs)