diff --git a/DotNetBuilder/MicroBuildServer.DotNetBuilder.csproj b/DotNetBuilder/MicroBuildServer.DotNetBuilder.csproj index 03b8db7..2bb803e 100644 --- a/DotNetBuilder/MicroBuildServer.DotNetBuilder.csproj +++ b/DotNetBuilder/MicroBuildServer.DotNetBuilder.csproj @@ -90,6 +90,7 @@ + diff --git a/DotNetBuilder/NuGetter.cs b/DotNetBuilder/NuGetter.cs index 8c78d10..618ab26 100644 --- a/DotNetBuilder/NuGetter.cs +++ b/DotNetBuilder/NuGetter.cs @@ -166,10 +166,11 @@ namespace MicroBuildServer.DotNetBuilder public static Response Pack(NuGetPackRequest request) { var console = new Console(); + PackageBuilder builder = new PackageBuilder(); var command = new PackCommand { - BasePath = request.BaseDirectory, - OutputDirectory = request.OutputDirectory, + BasePath = PathTools.OptimizePath(request.BaseDirectory), + OutputDirectory = PathTools.OptimizePath(request.OutputDirectory), Version = request.Version, Console = console, Verbosity = Verbosity.Detailed, diff --git a/DotNetBuilder/PathTools.cs b/DotNetBuilder/PathTools.cs new file mode 100644 index 0000000..4ad967b --- /dev/null +++ b/DotNetBuilder/PathTools.cs @@ -0,0 +1,57 @@ +using System; +using System.IO; +using System.Runtime.InteropServices; +using System.Text; + +namespace MicroBuildServer.DotNetBuilder +{ + static class PathTools + { + private const string UNC_PREFIX = "\\\\?\\"; + + const int MAX_PATH = 255; + + [DllImport("kernel32.dll", CharSet = CharSet.Auto)] + public static extern int GetShortPathName( + [MarshalAs(UnmanagedType.LPTStr)] string path, + [MarshalAs(UnmanagedType.LPTStr)] StringBuilder shortPath, + int shortPathLength); + + private static string GetShortPath(string path) + { + var shortPath = new StringBuilder(MAX_PATH); + GetShortPathName(path, shortPath, MAX_PATH); + return shortPath.ToString(); + } + + private static string OptimizeDirectoryPath(string fullPath) + { + var uncPath = UNC_PREFIX + fullPath; + var shortPath = GetShortPath(uncPath); + if (shortPath.StartsWith(UNC_PREFIX)) + { + shortPath = shortPath.Substring(UNC_PREFIX.Length); + } + return shortPath; + } + + public static string OptimizePath(string rawPath) + { + //Console.WriteLine(rawPath); + var fullPath = Path.GetFullPath(new Uri(rawPath).LocalPath); + string result; + if (Directory.Exists(fullPath)) + { + result = OptimizeDirectoryPath(fullPath); + } + else + { + var directoryPath = Path.GetDirectoryName(fullPath); + var optimizedDirectoryPath = OptimizeDirectoryPath(directoryPath); + result = Path.Combine(optimizedDirectoryPath, Path.GetFileName(fullPath)); + } + //Console.WriteLine(result); + return result; + } + } +}