private static void UpdateDependencyVersionFile(string filePath, Dictionary <string, PackageReferenceModel> packageRefDict)
 {
     using (var stream = new FileStream(filePath, FileMode.Open, FileAccess.ReadWrite))
     {
         var xml = XDocument.Load(stream);
         var ns  = xml.Root.GetDefaultNamespace();
         foreach (var dep in packageRefDict.Keys)
         {
             ProjectFileUtils.AddProperty(xml, packageRefDict[dep].XmlEntry, packageRefDict[dep].Version);
         }
         ProjectFileUtils.WriteXmlToFile(xml, stream);
     }
 }
        static void Main(string[] args)
        {
            var files = Directory.GetFiles(@"E:\iotexp\Azure-IoT-ConnectedCar-Core\", "*.csproj", SearchOption.AllDirectories);
            var dependencyFilePath = @"E:\iotexp\Azure-IoT-ConnectedCar-Core\infra\build\DependencyVersion.props";


            var packageRefDictionary = new Dictionary <string, PackageReferenceModel>(StringComparer.OrdinalIgnoreCase);

            foreach (var file in files)
            {
                using (var stream = new FileStream(file, FileMode.Open, FileAccess.ReadWrite))
                {
                    try
                    {
                        var xml        = XDocument.Load(stream);
                        var ns         = xml.Root.GetDefaultNamespace();
                        var itemGroups = xml.Root.Elements().Where(t => t.Name.LocalName == "ItemGroup" && t.HasElements);

                        foreach (var item in itemGroups)
                        {
                            var packageRefs = item.Elements(XName.Get("PackageReference", ns.NamespaceName));
                            foreach (var reference in packageRefs)
                            {
                                if (reference.HasElements || reference.HasAttributes)
                                {
                                    ConvertElementsToAttributes(reference, ns.NamespaceName);
                                    var name    = reference.Attribute(XName.Get("Include")).Value;
                                    var version = reference.Attribute(XName.Get("Version")).Value;

                                    var referenceModel = GetPackageReferenceModel(name, version, packageRefDictionary);
                                    reference.SetAttributeValue(XName.Get("Version"), $@"$({referenceModel.XmlEntry})");
                                }
                            }
                        }
                        ProjectFileUtils.WriteXmlToFile(xml, stream);
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine($"Exception thrown while trying to read file {file}. {e.Message}");
                    }
                }
            }

            UpdateDependencyVersionFile(dependencyFilePath, packageRefDictionary);

            Console.ReadLine();
        }