diff options
author | Alan McGovern <alan@xamarin.com> | 2014-01-16 00:17:10 +0400 |
---|---|---|
committer | Alan McGovern <alan@xamarin.com> | 2014-01-16 00:33:16 +0400 |
commit | 6d7e812d709e182810d64c51a4e2d1af25d8adfa (patch) | |
tree | 3f9a9f0c0479cd3f2b8e7a834314887658846cab /mcs/class/Microsoft.Build.Utilities | |
parent | 89fcde4fd1b96aa575741a799e305a50977e139b (diff) |
[Microsoft.Build.Engine] Fix the escaping/unescaping of FullPath metadata
It is incorrect to escape the FullPath metadata for a build item when
we invoke GetEvaluatedMetadata. If we do this we end up completely breaking
every file with a special character in it as things like this would always
fail as we'd pass an escaped path to the filesystem:
File.Exists (item.GetEvaluatedMetadata ("FullPath"))
The iOS designer encountered this issue when we added retina images
called "foo@2x.png" to our solution.
With tests.
Diffstat (limited to 'mcs/class/Microsoft.Build.Utilities')
-rw-r--r-- | mcs/class/Microsoft.Build.Utilities/Mono.XBuild.Utilities/ReservedNameUtils.cs | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/mcs/class/Microsoft.Build.Utilities/Mono.XBuild.Utilities/ReservedNameUtils.cs b/mcs/class/Microsoft.Build.Utilities/Mono.XBuild.Utilities/ReservedNameUtils.cs index f2712566d59..6789cfbd928 100644 --- a/mcs/class/Microsoft.Build.Utilities/Mono.XBuild.Utilities/ReservedNameUtils.cs +++ b/mcs/class/Microsoft.Build.Utilities/Mono.XBuild.Utilities/ReservedNameUtils.cs @@ -77,7 +77,8 @@ namespace Mono.XBuild.Utilities { switch (metadataName.ToLowerInvariant ()) { case "fullpath": - return Path.GetFullPath (itemSpec); + var unescapedItemSpec = MSBuildUtils.Unescape (itemSpec); + return MSBuildUtils.Escape (Path.GetFullPath (unescapedItemSpec)); case "rootdir": if (Path.IsPathRooted (itemSpec)) return Path.GetPathRoot (itemSpec); |