示例#1
0
        private AssemblyInformation SaveIfNotExistsOrDifferent(AssemblyInformation existingAsm,
                                                               AssemblyInformation newAsm, string baseDirectory)
        {
            if (existingAsm != null)
            {
                newAsm.Code = existingAsm.Code; // Prepare for update.
            }
            if (existingAsm == null || newAsm.CompareTo(existingAsm) == 1 ||
                (newAsm.Version == existingAsm.Version && newAsm.MD5 != existingAsm.MD5))
            {
                byte[] asmBytes = File.ReadAllBytes(Path.Combine(baseDirectory, newAsm.FileName));
                asmDAO.SaveAssembly(newAsm, asmBytes);

                // TODO: remove deleteDependencies from SaveAssembly do some sort of incremental SaveIfNotExists
                // Updating each assembly deparatly. Right now we just update everything if mainDll differs.
                foreach (var dependency in newAsm.Dependencies)
                {
                    string dependencyCode = asmDAO.GetDependencyCode(dependency.MD5);
                    if (string.IsNullOrEmpty(dependencyCode))
                    {
                        asmBytes = File.ReadAllBytes(Path.Combine(baseDirectory, dependency.FileName));
                        asmDAO.SaveAssemblyDependency(newAsm, dependency, asmBytes);
                    }
                    else
                    {
                        asmDAO.SaveAssemblyDependency(newAsm, dependencyCode);
                    }
                }
                asmDAO.DeleteOrphanDependency();
                licenseManager.UpdateAddinDueDate(newAsm);
                return(newAsm);
            }
            else
            {
                return(existingAsm);
            }
        }