public static ProjectDatum From(string projectFileName)
            {
                var result = new ProjectDatum();

                try
                {
                    result.ProjectName = Path.GetFileName(projectFileName);
                    result.ProjectPath = Path.GetDirectoryName(projectFileName);

                    var doc = XDocument.Load(projectFileName);
                    var ns = doc.Root.Name.Namespace;
                    var element = doc.Descendants(ns + "PropertyGroup").First();

                    result.AssemblyName = element.Element(ns + "AssemblyName").Value;
                    result.Namespace = element.Element(ns + "RootNamespace").Value;

                    var directoryInfo = Directory.GetParent(result.ProjectPath);
                    while (directoryInfo != null)
                    {
                        result.IsNested =
                            directoryInfo.GetFiles("*.??proj", SearchOption.TopDirectoryOnly).Any(
                                fi => fi.Extension == ".csproj" || fi.Extension == ".vbproj");

                        if (result.IsNested)
                            break;
                        directoryInfo = directoryInfo.Parent;
                    }

                    return result;

                }
                catch (Exception ex)
                {
                    return null;
                }
            }
            public static ProjectDatum From(string projectFileName)
            {
                var result = new ProjectDatum();

                try
                {
                    result.ProjectName = Path.GetFileName(projectFileName);
                    result.ProjectPath = Path.GetDirectoryName(projectFileName);

                    var doc = XDocument.Load(projectFileName);
                    var ns = doc.Root.Name.Namespace;
                    var element = doc.Descendants(ns + "PropertyGroup").First();

                    result.AssemblyName = element.Element(ns + "AssemblyName").Value;
                    result.Namespace = element.Element(ns + "RootNamespace").Value;

                    return result;
                }
                catch (Exception ex)
                {
                    return null;
                }
            }