You are viewing a plain text version of this content. The canonical link for it is here.
Posted to npanday-commits@incubator.apache.org by br...@apache.org on 2014/02/26 15:03:21 UTC

svn commit: r1572077 - /incubator/npanday/trunk/dotnet/assemblies/NPanday.ProjectImporter/Engine/src/main/csharp/Parser/SlnParser/ProjectSolutionParser.cs

Author: brett
Date: Wed Feb 26 15:03:20 2014
New Revision: 1572077

URL: http://svn.apache.org/r1572077
Log:
workaround an issue where projects fail to import

Modified:
    incubator/npanday/trunk/dotnet/assemblies/NPanday.ProjectImporter/Engine/src/main/csharp/Parser/SlnParser/ProjectSolutionParser.cs

Modified: incubator/npanday/trunk/dotnet/assemblies/NPanday.ProjectImporter/Engine/src/main/csharp/Parser/SlnParser/ProjectSolutionParser.cs
URL: http://svn.apache.org/viewvc/incubator/npanday/trunk/dotnet/assemblies/NPanday.ProjectImporter/Engine/src/main/csharp/Parser/SlnParser/ProjectSolutionParser.cs?rev=1572077&r1=1572076&r2=1572077&view=diff
==============================================================================
--- incubator/npanday/trunk/dotnet/assemblies/NPanday.ProjectImporter/Engine/src/main/csharp/Parser/SlnParser/ProjectSolutionParser.cs (original)
+++ incubator/npanday/trunk/dotnet/assemblies/NPanday.ProjectImporter/Engine/src/main/csharp/Parser/SlnParser/ProjectSolutionParser.cs Wed Feb 26 15:03:20 2014
@@ -30,6 +30,7 @@ using Microsoft.Build.BuildEngine;
 using System.Xml;
 using System.Windows.Forms;
 using log4net;
+using System.Xml.Xsl;
 
 /// Author: Leopoldo Lee Agdeppa III
 
@@ -156,14 +157,23 @@ namespace NPanday.ProjectImporter.Parser
                         // This may have been mitigated by setting VisualStudioVersion and can be removed if the problem doesn't re-appear.
                         if (log.IsDebugEnabled)
                         {
-                            log.DebugFormat("VisualStudioVersion: global {0}, evaluated {1}", 
+                            log.DebugFormat("VisualStudioVersion: global {0}, evaluated {1}",
                                 prj.GlobalProperties["VisualStudioVersion"], prj.EvaluatedProperties["VisualStudioVersion"]);
                             log.DebugFormat("CloudExtensionsDir: global {0}, evaluated {1}",
                                 prj.GlobalProperties["CloudExtensionsDir"], prj.EvaluatedProperties["CloudExtensionsDir"]);
+                            log.DebugFormat("MSBuildExtensionsPath: global {0}, evaluated {1}",
+                                prj.GlobalProperties["MSBuildExtensionsPath"], prj.EvaluatedProperties["MSBuildExtensionsPath"]);
                         }
 
                         prj.Load(fullpath);
                     }
+                    catch (NullReferenceException e)
+                    {
+                        log.Error("Error reading project from path " + fullpath, e);
+                        // workaround it by removing the imports
+                        prj.LoadXml(TransformProjectFile(fullpath));
+                        prj.FullFileName = fullpath;
+                    }
                     catch (Exception e)
                     {
                         log.Error("Error reading project from path " + fullpath, e);
@@ -193,7 +203,24 @@ namespace NPanday.ProjectImporter.Parser
             return list;
         }
 
-
+        private string TransformProjectFile(string fullpath)
+        {
+            XslCompiledTransform transform = new XslCompiledTransform();
+            transform.Load(XmlReader.Create(new StringReader(
+                @"<?xml version='1.0' encoding='ISO-8859-1'?>
+<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msbuild='http://schemas.microsoft.com/developer/msbuild/2003'>
+  <xsl:template match='@*|node()'>
+    <xsl:copy>
+      <xsl:apply-templates select='@*|node()'/>
+    </xsl:copy>
+  </xsl:template>
+  <xsl:template match='msbuild:Import[@Project != """"]'/>
+</xsl:stylesheet>" )));
+            StringWriter w = new StringWriter();
+            transform.Transform(fullpath, XmlWriter.Create(w));
+            log.DebugFormat("Project XML: {0}", w.ToString());
+            return w.ToString();
+        }
 
         protected void ParseProjectReferences(Dictionary<string, object> dictionary, NPanday.ProjectImporter.Parser.SlnParser.Model.Project project, NPanday.ProjectImporter.Parser.SlnParser.Model.Solution solution)
         {