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;
+ }
+ }
+}