private XtbNuGetPackage GetXtbPackage(IPackage package) { var xtbPackage = new XtbNuGetPackage(package, PackageInstallAction.None); var files = package.GetFiles(); bool install = false, update = false, compatible = false, otherFilesFound = false; var xtbDependency = package.FindDependency("XrmToolBox", null); if (xtbDependency != null) { var xtbDependencyVersion = xtbDependency.VersionSpec.MinVersion.Version; compatible = IsPluginDependencyCompatible(xtbDependencyVersion); } var currentVersion = new Version(int.MaxValue, int.MaxValue, int.MaxValue, int.MaxValue); var currentVersionFound = false; // TODO: Don't compare with all files, plugin packages may contain other dll's and exe's that have other versioning // How to determine actual version of existing plugin? foreach (var file in files) { if (Path.GetDirectoryName(file.EffectivePath).ToLower() == "plugins") { // Only check version of files in the Plugins folder var existingPluginFile = plugins.FirstOrDefault(p => file.EffectivePath.EndsWith(p.Name)); if (existingPluginFile == null) { install = true; } else { // If a file is found, we check version only if the file // contains classes that implement IXrmToolBoxPlugin if (!existingPluginFile.ImplementsXrmToolBoxPlugin()) { otherFilesFound = true; continue; } var existingFileVersion = existingPluginFile.GetAssemblyVersion(); if (existingFileVersion < currentVersion) { currentVersion = existingFileVersion; currentVersionFound = true; } if (existingFileVersion < package.Version.Version) { update = true; } } } } if (currentVersionFound) { xtbPackage.CurrentVersion = currentVersion; } if (otherFilesFound || update) { xtbPackage.RequiresXtbRestart = true; } if (!compatible) { xtbPackage.Action = PackageInstallAction.Unavailable; } else if (update) { xtbPackage.Action = PackageInstallAction.Update; } else if (install) { xtbPackage.Action = PackageInstallAction.Install; } else { xtbPackage.Action = PackageInstallAction.None; } return(xtbPackage); }
private XtbNuGetPackage GetXtbPackage(IPackage package) { var xtbPackage = new XtbNuGetPackage(package, PackageInstallAction.None); var files = package.GetFiles(); bool install = false, update = false, compatible = false, otherFilesFound = false; var xtbDependency = package.FindDependency("XrmToolBox", null); if (xtbDependency != null) { var xtbDependencyVersion = xtbDependency.VersionSpec.MinVersion.Version; compatible = IsPluginDependencyCompatible(xtbDependencyVersion); } var currentVersion = new Version(int.MaxValue, int.MaxValue, int.MaxValue, int.MaxValue); var currentVersionFound = false; // TODO: Don't compare with all files, plugin packages may contain other dll's and exe's that have other versioning // How to determine actual version of existing plugin? foreach (var file in files) { if (Path.GetDirectoryName(file.EffectivePath).ToLower() == "plugins") { // Only check version of files in the Plugins folder var existingPluginFile = plugins.FirstOrDefault(p => file.EffectivePath.ToLower().EndsWith(p.Name.ToLower())); if (existingPluginFile == null) { install = true; } else { // If a file is found, we check version only if the file // contains classes that implement IXrmToolBoxPlugin if (!existingPluginFile.ImplementsXrmToolBoxPlugin()) { otherFilesFound = true; continue; } var existingFileVersion = existingPluginFile.GetAssemblyVersion(); if (existingFileVersion < currentVersion) { currentVersion = existingFileVersion; currentVersionFound = true; } if (existingFileVersion < package.Version.Version) { update = true; } } } } if (currentVersionFound) { xtbPackage.CurrentVersion = currentVersion; } if (otherFilesFound || update) { xtbPackage.RequiresXtbRestart = true; } if (!compatible) { xtbPackage.Action = PackageInstallAction.Unavailable; } else if (update) { xtbPackage.Action = PackageInstallAction.Update; } else if (install) { xtbPackage.Action = PackageInstallAction.Install; } else { xtbPackage.Action = PackageInstallAction.None; } return xtbPackage; }