Index: src/Tasks/MSITask.xsd
===================================================================
RCS file: /cvsroot/nantcontrib/NAntContrib/src/Tasks/MSITask.xsd,v
retrieving revision 1.8
diff -u -r1.8 MSITask.xsd
--- src/Tasks/MSITask.xsd	25 Jul 2003 03:55:56 -0000	1.8
+++ src/Tasks/MSITask.xsd	5 Sep 2003 07:53:24 -0000
@@ -660,6 +660,7 @@
 				<xsd:attribute name="name" type="xsd:string" use="required" />
 				<xsd:attribute name="value" type="xsd:string" use="optional" />
 				<xsd:attribute name="dword" type="xsd:string" use="optional" />
+				<xsd:attribute name="id" type="xsd:string" use="optional" />
 			</xsd:extension>
 		</xsd:simpleContent>
 	</xsd:complexType>
Index: src/Tasks/MSITask.cs
===================================================================
RCS file: /cvsroot/nantcontrib/NAntContrib/src/Tasks/MSITask.cs,v
retrieving revision 1.28
diff -u -r1.28 MSITask.cs
--- src/Tasks/MSITask.cs	3 Aug 2003 12:23:41 -0000	1.28
+++ src/Tasks/MSITask.cs	5 Sep 2003 07:53:33 -0000
@@ -846,7 +846,12 @@
                         return success;
                     }
 
-                    if (files.Contains(component.directory + "|" + component.key.file))
+                    if ((component.attr & 4) != 0)
+                    {
+                        recComp.set_StringData(6, component.key.file);
+                        compView.Modify(MsiViewModify.msiViewModifyMerge, recComp);
+                    }
+                    else if (files.Contains(component.directory + "|" + component.key.file))
                     {
                         string keyFileName = (string)files[component.directory + "|" + component.key.file];
                         if (keyFileName == "KeyIsDotNetAssembly")
@@ -1846,8 +1851,8 @@
                             null, InstallerObject, 
                             new object[] { 6 });
 
-                        recVal.set_StringData(1, "_" + 
-                            Guid.NewGuid().ToString().ToUpper().Replace("-", null));
+                        recVal.set_StringData(1, (value.id != null ? value.id : "_" + 
+                            Guid.NewGuid().ToString().ToUpper().Replace("-", null)));
                         recVal.set_StringData(2, rootKey.ToString());
                         recVal.set_StringData(3, key.path);
                         recVal.set_StringData(4, value.name);
