make commands work in directories with spaces when using a response file as well, Issue 41387

git-svn-id: https://svn.apache.org/repos/asf/ant/antlibs/dotnet/trunk@498915 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/changes.xml b/changes.xml
index 239e12f..83ff2f5 100644
--- a/changes.xml
+++ b/changes.xml
@@ -22,6 +22,11 @@
     </properties>
 
     <release version="SVN trunk" date="unpublished">
+      <action type="fix" issue="41387">
+        The compilation tasks failed if the source files resided in a
+        directory with spaces in its full path and a response file was
+        used.
+      </action>
     </release>
 
     <release version="1.0" date="2006-11-06">
diff --git a/src/main/org/apache/ant/dotnet/NetCommand.java b/src/main/org/apache/ant/dotnet/NetCommand.java
index 0e4b6d5..ac7f34e 100644
--- a/src/main/org/apache/ant/dotnet/NetCommand.java
+++ b/src/main/org/apache/ant/dotnet/NetCommand.java
@@ -42,6 +42,7 @@
 import org.apache.tools.ant.taskdefs.Execute;
 import org.apache.tools.ant.taskdefs.ExecuteStreamHandler;
 import org.apache.tools.ant.taskdefs.LogStreamHandler;
+import org.apache.tools.ant.taskdefs.condition.Os;
 import org.apache.tools.ant.types.Commandline;
 
 /**
@@ -58,6 +59,12 @@
 
     private static final FileUtils FILE_UTILS = FileUtils.getFileUtils();
 
+    private static final boolean IS_WINDOWS;
+
+    static {
+        IS_WINDOWS = Os.isFamily("windows");
+    }
+
     /**
      *  owner project
      */
@@ -351,7 +358,14 @@
                 PrintWriter out = new PrintWriter(new BufferedOutputStream(fos));
                 //start at 1 because element 0 is the executable name
                 for (int i = 1; i < commands.length; ++i) {
-                    out.println(commands[i]);
+                    if (IS_WINDOWS && commands[i].indexOf(" ") > -1) {
+                        String q = commands[i].indexOf("\"") > -1 ? "'" : "\"";
+                        out.print(q);
+                        out.print(commands[i]);
+                        out.println(q);
+                    } else {
+                        out.println(commands[i]);
+                    }
                 }
                 out.flush();
                 out.close();