public static bool IsSatellitePackage( IPackage package, IPackageRepository repository, FrameworkName targetFramework, out IPackage runtimePackage) { // A satellite package has the following properties: // 1) A package suffix that matches the package's language, with a dot preceding it // 2) A dependency on the package with the same Id minus the language suffix // 3) The dependency can be found by Id in the repository (as its path is needed for installation) // Example: foo.ja-jp, with a dependency on foo runtimePackage = null; if (package.IsSatellitePackage()) { string runtimePackageId = package.Id.Substring(0, package.Id.Length - (package.Language.Length + 1)); PackageDependency dependency = package.FindDependency(runtimePackageId, targetFramework); if (dependency != null) { runtimePackage = repository.FindPackage(runtimePackageId, versionSpec: dependency.VersionSpec, allowPrereleaseVersions: true, allowUnlisted: true); } } return runtimePackage != null; }
public static bool IsSatellitePackage( IPackage package, IPackageRepository repository, FrameworkName targetFramework, out IPackage runtimePackage) { // A satellite package has the following properties: // 1) A package suffix that matches the package's language, with a dot preceding it // 2) A dependency on the package with the same Id minus the language suffix // 3) The dependency can be found by Id in the repository (as its path is needed for installation) // Example: foo.ja-jp, with a dependency on foo runtimePackage = null; if (package.IsSatellitePackage()) { string runtimePackageId = package.Id.Substring(0, package.Id.Length - (package.Language.Length + 1)); PackageDependency dependency = package.FindDependency(runtimePackageId, targetFramework); if (dependency != null) { runtimePackage = repository.FindPackage(runtimePackageId, versionSpec: dependency.VersionSpec, allowPrereleaseVersions: true, allowUnlisted: true); } } return(runtimePackage != null); }
public static bool IsSatellitePackage(IPackage package, IPackageRepository repository, out IPackage runtimePackage) { // A satellite package has the following properties: // 1) A package suffix that matches the package's language, with a dot preceding it // 2) A dependency on the package with the same Id minus the language suffix // 3) The dependency can be found by Id in the repository (as its path is needed for installation) // Example: foo.ja-jp, with a dependency on foo runtimePackage = null; if (!String.IsNullOrEmpty(package.Language) && package.Id.EndsWith("." + package.Language, StringComparison.OrdinalIgnoreCase)) { string runtimePackageId = package.Id.Substring(0, package.Id.Length - (package.Language.Length + 1)); PackageDependency dependency = package.FindDependency(runtimePackageId); if (dependency != null) { runtimePackage = repository.FindPackage(runtimePackageId); } } return runtimePackage != null; }
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, currentVersionDownloadsCount); var files = package.GetFiles(); bool install = false, update = false, otherFilesFound = false; var xtbDependency = package.FindDependency("XrmToolBox", null); if (xtbDependency != null) { var xtbDependencyVersion = xtbDependency.VersionSpec.MinVersion.Version; xtbPackage.Compatibilty = IsPluginDependencyCompatible(xtbDependencyVersion); } else { xtbDependency = package.FindDependency("XrmToolBoxPackage", null); if (xtbDependency != null) { var xtbDependencyVersion = xtbDependency.VersionSpec.MinVersion.Version; xtbPackage.Compatibilty = IsPluginDependencyCompatible(xtbDependencyVersion); } else { xtbPackage.Compatibilty = CompatibleState.Other; } } var currentVersion = new Version(int.MaxValue, int.MaxValue, int.MaxValue, int.MaxValue); var currentVersionFound = false; foreach (var file in files) { var directoryName = Path.GetDirectoryName(file.EffectivePath); if (directoryName == null) { continue; } if (directoryName.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 fileVersionInfo = FileVersionInfo.GetVersionInfo(existingPluginFile.FullName); var fileVersion = new Version(fileVersionInfo.FileMajorPart, fileVersionInfo.FileMinorPart, fileVersionInfo.FileBuildPart, fileVersionInfo.FilePrivatePart); var existingFileVersion = fileVersion; 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 (xtbPackage.Compatibilty != CompatibleState.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; }