Author: ankit
Date: 2007-09-27 16:56:05 -0400 (Thu, 27 Sep 2007)
New Revision: 86538
Modified:
trunk/monodevelop/Extras/prj2make-sharp-lib/ChangeLog
trunk/monodevelop/Extras/prj2make-sharp-lib/DefaultMSBuildProjectExtension.cs
trunk/monodevelop/Extras/prj2make-sharp-lib/MSBuildFileFormat.cs
trunk/monodevelop/Extras/prj2make-sharp-lib/Utils.cs
Log:
* DefaultMSBuildProjectExtension.cs (FileToXmlElement): Handle existing
XmlElements. Update LogicalName and DependentUpon correctly.
* MSBuildFileFormat.cs (WriteFileInternal): Always update XmlElements for
project files.
(HandleFileRenamed): Use FileToXmlElement to correctly update the xml
element.
* Utils.cs (RemoveChild): New.
Modified: trunk/monodevelop/Extras/prj2make-sharp-lib/ChangeLog
===================================================================
--- trunk/monodevelop/Extras/prj2make-sharp-lib/ChangeLog 2007-09-27
20:44:41 UTC (rev 86537)
+++ trunk/monodevelop/Extras/prj2make-sharp-lib/ChangeLog 2007-09-27
20:56:05 UTC (rev 86538)
@@ -1,3 +1,13 @@
+2007-09-28 Ankit Jain <[EMAIL PROTECTED]>
+
+ * DefaultMSBuildProjectExtension.cs (FileToXmlElement): Handle existing
+ XmlElements. Update LogicalName and DependentUpon correctly.
+ * MSBuildFileFormat.cs (WriteFileInternal): Always update XmlElements
for
+ project files.
+ (HandleFileRenamed): Use FileToXmlElement to correctly update the xml
+ element.
+ * Utils.cs (RemoveChild): New.
+
2007-09-27 Ankit Jain <[EMAIL PROTECTED]>
* MSBuildProjectExtension.cs: New.
Modified:
trunk/monodevelop/Extras/prj2make-sharp-lib/DefaultMSBuildProjectExtension.cs
===================================================================
---
trunk/monodevelop/Extras/prj2make-sharp-lib/DefaultMSBuildProjectExtension.cs
2007-09-27 20:44:41 UTC (rev 86537)
+++
trunk/monodevelop/Extras/prj2make-sharp-lib/DefaultMSBuildProjectExtension.cs
2007-09-27 20:56:05 UTC (rev 86538)
@@ -301,43 +301,69 @@
//FIXME: Subtype
+ bool newElement = false;
XmlDocument doc = data.Document;
- XmlElement elem = doc.CreateElement (name, Utils.ns);
- elem.SetAttribute ("Include", Utils.CanonicalizePath
(projectFile.RelativePath));
-
- XmlNode n = doc.SelectSingleNode (String.Format (
+ XmlElement elem;
+ if (!data.ProjectFileElements.TryGetValue (projectFile,
out elem)) {
+ newElement = true;
+ elem = doc.CreateElement (name, Utils.ns);
+ XmlNode n = doc.SelectSingleNode (String.Format
(
"/tns:Project/tns:ItemGroup/tns:{0}",
name), MSBuildFileFormat.NamespaceManager);
- if (n == null) {
- n = doc.CreateElement ("ItemGroup", Utils.ns);
- doc.DocumentElement.AppendChild (n);
- n.AppendChild (elem);
- } else {
- n.ParentNode.AppendChild (elem);
- }
+ if (n == null) {
+ n = doc.CreateElement ("ItemGroup",
Utils.ns);
+ doc.DocumentElement.AppendChild (n);
+ n.AppendChild (elem);
+ } else {
+ n.ParentNode.AppendChild (elem);
+ }
- if (projectFile.BuildAction ==
BuildAction.EmbedAsResource) {
- if (Utils.GetMSBuildData (project) == null ||
-
Services.ProjectService.GetDefaultResourceId (projectFile) !=
projectFile.ResourceId)
+ bool notMSBuild = (Utils.GetMSBuildData
(project) == null);
+ if (projectFile.BuildAction ==
BuildAction.EmbedAsResource &&
+ (notMSBuild ||
Services.ProjectService.GetDefaultResourceId (projectFile) !=
projectFile.ResourceId)) {
//Emit LogicalName if we are writing
elements for a Non-MSBuidProject,
- //(eg. when converting a gtk-sharp
project, it might depend on non-vs
- // style resource naming)
+ // (eg. when converting a gtk-sharp
project, it might depend on non-vs
+ // style resource naming )
//Or when the resourceId is different
from the default one
Utils.EnsureChildValue (elem,
"LogicalName", Utils.Escape (projectFile.ResourceId));
+ if (notMSBuild)
+ // explicitly set the
resourceId, as once when it becomes a
+ // msbuild project, .ResourceId
will give resourceId by msbuild
+ // rules, but we want to retain
this value
+ projectFile.ResourceId =
projectFile.ResourceId;
+ }
+
+ if (projectFile.BuildAction ==
BuildAction.FileCopy)
+ Utils.EnsureChildValue (elem,
"CopyToOutputDirectory", "Always");
+
+ if (projectFile.IsExternalToProject)
+ Utils.EnsureChildValue (elem, "Link",
Path.GetFileName (projectFile.Name));
+ }
+
+ elem.SetAttribute ("Include", Utils.CanonicalizePath
(projectFile.RelativePath));
+
+ if (projectFile.BuildAction ==
BuildAction.EmbedAsResource) {
+ string projectResourceId =
projectFile.ResourceId;
+
+ if (!newElement) {
+ if
(Services.ProjectService.GetDefaultResourceId (projectFile) ==
projectResourceId)
+ Utils.RemoveChild (elem,
"LogicalName");
+ else
+ Utils.EnsureChildValue (elem,
"LogicalName", Utils.Escape (projectResourceId));
+ }
+
//DependentUpon is relative to the basedir of
the 'pf' (resource file)
- if (!String.IsNullOrEmpty
(projectFile.DependsOn))
+ if (String.IsNullOrEmpty
(projectFile.DependsOn)) {
+ if (!newElement)
+ Utils.RemoveChild (elem,
"DependentUpon");
+ } else {
Utils.EnsureChildValue (elem,
"DependentUpon",
Utils.CanonicalizePath
(Runtime.FileService.AbsoluteToRelativePath (
Path.GetDirectoryName
(projectFile.Name), projectFile.DependsOn)));
+ }
}
- if (projectFile.BuildAction == BuildAction.FileCopy)
- Utils.EnsureChildValue (elem,
"CopyToOutputDirectory", "Always");
-
- if (projectFile.IsExternalToProject)
- Utils.EnsureChildValue (elem, "Link",
Path.GetFileName (projectFile.Name));
-
return elem;
}
Modified: trunk/monodevelop/Extras/prj2make-sharp-lib/MSBuildFileFormat.cs
===================================================================
--- trunk/monodevelop/Extras/prj2make-sharp-lib/MSBuildFileFormat.cs
2007-09-27 20:44:41 UTC (rev 86537)
+++ trunk/monodevelop/Extras/prj2make-sharp-lib/MSBuildFileFormat.cs
2007-09-27 20:56:05 UTC (rev 86538)
@@ -264,16 +264,16 @@
foreach (ProjectReference pref in
project.ProjectReferences)
data.ProjectReferenceElements [pref] =
data.ExtensionChain.ReferenceToXmlElement (data, project, pref);
+ foreach (ProjectFile pfile in project.ProjectFiles) {
+ XmlElement xe =
data.ExtensionChain.FileToXmlElement (data, project, pfile);
+ if (xe != null)
+ data.ProjectFileElements [pfile] = xe;
+ }
+
//FIXME: Set ActiveConfiguration
CleanUpEmptyItemGroups (doc);
if (newdoc) {
- foreach (ProjectFile pfile in
project.ProjectFiles) {
- XmlElement xe =
data.ExtensionChain.FileToXmlElement (data, project, pfile);
- if (xe != null)
- data.ProjectFileElements
[pfile] = xe;
- }
-
XmlElement elem = doc.CreateElement
("Configuration", Utils.ns);
data.GlobalConfigElement.AppendChild (elem);
elem.InnerText = "Debug";
@@ -660,8 +660,9 @@
return;
//FIXME: Check whether this file is a ApplicationIcon
and accordingly update that?
- XmlElement elem = d.ProjectFileElements [e.ProjectFile];
- elem.SetAttribute ("Include", Utils.CanonicalizePath
(e.ProjectFile.RelativePath));
+ XmlElement elem = d.ExtensionChain.FileToXmlElement (d,
e.Project, e.ProjectFile);
+ if (elem != null)
+ d.ProjectFileElements [e.ProjectFile] = elem;
}
static void HandleFilePropertyChanged (object sender,
ProjectFileEventArgs e)
Modified: trunk/monodevelop/Extras/prj2make-sharp-lib/Utils.cs
===================================================================
--- trunk/monodevelop/Extras/prj2make-sharp-lib/Utils.cs 2007-09-27
20:44:41 UTC (rev 86537)
+++ trunk/monodevelop/Extras/prj2make-sharp-lib/Utils.cs 2007-09-27
20:56:05 UTC (rev 86538)
@@ -64,6 +64,13 @@
return null;
}
+ public static void RemoveChild (XmlNode parent, string
localName)
+ {
+ XmlNode child = MoveToChild (parent, localName);
+ if (child != null)
+ parent.RemoveChild (child);
+ }
+
public static void EnsureChildValue (XmlNode node, string
localName, bool val)
{
EnsureChildValue (node, localName, val.ToString
().ToLower ());
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches