Index: Al.cs
===================================================================
--- Al.cs	(revision 40172)
+++ Al.cs	(working copy)
@@ -13,6 +13,7 @@
 using System.Collections;
 using System.Reflection;
 using System.Reflection.Emit;
+using System.Text;
 
 namespace Mono.AssemblyLinker
 {
@@ -79,25 +80,7 @@
 				if (response_files.ContainsKey (resfile_name))
 					Report (1006, "Response file '" + resfile_name + "' was already included");
 				response_files [resfile_name] = resfile_name;
-
-				StreamReader reader = null;
-				try {
-					reader = new StreamReader (new FileStream (resfile_name, FileMode.Open));
-
-					string line;
-					while ((line = reader.ReadLine ()) != null) {
-						foreach (string s in line.Split (' '))
-							if (s.Length > 0)
-								flat_args.Add (s);
-					}
-				}
-				catch (Exception ex) {
-					Report (1007, "Error opening response file '" + resfile_name + "' -- '" + ex.Message + "'");
-				}
-				finally {
-					if (reader != null)
-						reader.Close ();
-				}
+				LoadArgs (resfile_name, flat_args);
 			}
 
 			if (flat_args.Count == 0)
@@ -610,6 +593,51 @@
 			}
 		}
 
+		private void LoadArgs (string file, ArrayList args) {
+			StreamReader f = null;
+			string line;
+			try {
+				f = new StreamReader (file);
+
+				StringBuilder sb = new StringBuilder ();
+			
+				while ((line = f.ReadLine ()) != null){
+					int t = line.Length;
+
+					for (int i = 0; i < t; i++){
+						char c = line [i];
+						
+						if (c == '"' || c == '\''){
+							char end = c;
+							
+							for (i++; i < t; i++){
+								c = line [i];
+
+								if (c == end)
+									break;
+								sb.Append (c);
+							}
+						} else if (c == ' '){
+							if (sb.Length > 0){
+								args.Add (sb.ToString ());
+								sb.Length = 0;
+							}
+						} else
+							sb.Append (c);
+					}
+					if (sb.Length > 0){
+						args.Add (sb.ToString ());
+						sb.Length = 0;
+					}
+				}
+			} catch (Exception ex) {
+				Report (1007, "Error opening response file '" + file + "' -- '" + ex.Message + "'");
+			} finally {
+				if (f != null)
+					f.Close ();
+			}
+		}
+
 		string[] usage = {
 			"Usage: al [options] [sources]",
 			"Options: ('/out' must be specified)",
