/// <summary> /// Initializes a new instance of the <see cref="SolutionDependency" /> class. /// </summary> /// <param name="dependency">The dependency.</param> /// <exception cref="ArgumentNullException"></exception> /// <exception cref="ArgumentException">No dependency id specified.</exception> public SolutionDependency(AppPackageDependency dependency) { if (dependency == null) { throw new ArgumentNullException(nameof(dependency)); } if (dependency.AppPackageDependencyId == null) { throw new ArgumentException("No dependency id specified."); } Name = dependency.Name; DependencyName = dependency.AppPackageDependencyName; Version minVersion; if (string.IsNullOrEmpty(dependency.AppPackageMinimumVersion) || dependency.AppPackageMinimumVersion.Equals("any", StringComparison.InvariantCultureIgnoreCase) || !Version.TryParse(dependency.AppPackageMinimumVersion, out minVersion)) { MinimumVersion = null; } else { MinimumVersion = minVersion; } Version maxVersion; if (string.IsNullOrEmpty(dependency.AppPackageMaximumVersion) || dependency.AppPackageMaximumVersion.Equals("any", StringComparison.InvariantCultureIgnoreCase) || !Version.TryParse(dependency.AppPackageMaximumVersion, out maxVersion)) { MaximumVersion = null; } else { MaximumVersion = maxVersion; } IsRequired = dependency.AppPackageIsRequired ?? true; DependencyApplication = dependency.AppPackageDependencyId.Value; }
/// <summary> /// Set the application metadata. /// </summary> /// <param name="metadata"></param> /// <param name="context"></param> void IDataTarget.SetMetadata(Metadata metadata, IProcessingContext context) { if (SkipMetadata) { context.WriteInfo("Skipping app library metadata"); return; } ///// // Write the application ///// App app = Entity.GetByField <App>(metadata.AppId.ToString( ), new EntityRef("core:applicationId")).FirstOrDefault( ); if (app == null) { app = new App { Name = metadata.AppName, Description = metadata.Description, ApplicationId = metadata.AppId, Publisher = metadata.Publisher, PublisherUrl = metadata.PublisherUrl, ReleaseDate = metadata.ReleaseDate == DateTime.MinValue.ToUniversalTime() ? ( DateTime? )null : metadata.ReleaseDate.ToUniversalTime() }; app.Save( ); } ///// // Write the app-package ///// AppPackage package = app.ApplicationPackages.FirstOrDefault(ap => ap.AppVerId == metadata.AppVerId); if (package == null) { package = new AppPackage( ); var version = new Version(metadata.Version); AppPackage existingVersion = app.ApplicationPackages.FirstOrDefault(ap => ap.AppVersionString == version.ToString( )); bool versionExists = false; while (existingVersion != null) { versionExists = true; version = new Version(version.Major, version.Minor + 1); existingVersion = app.ApplicationPackages.FirstOrDefault(ap => ap.AppVersionString == version.ToString( )); } metadata.Version = version.ToString( ); if (versionExists) { context.WriteWarning("Version already exists.. incrementing"); } } else { package = package.AsWritable <AppPackage>( ); context.WriteWarning("Already installed.. overwriting"); } string solutionNames = app.InSolution?.Name; ///// // Localize the string values. ///// package.Name = string.Format("{0} Application Package {1}", solutionNames ?? app.Name, metadata.Version); package.Description = string.Format("Application Package for version {1} of {0}.", app.Name, metadata.Version); package.AppVersionString = metadata.Version; package.AppVerId = metadata.AppVerId; package.PackageForApplication = app; if (metadata.PublishDate != DateTime.MinValue && metadata.PublishDate > SqlDateTime.MinValue.Value) { package.PublishDate = metadata.PublishDate; } if (metadata.Dependencies != null) { IEntityCollection <AppPackageDependency> dependencies = new EntityCollection <AppPackageDependency>( ); foreach (SolutionDependency dependency in metadata.Dependencies) { AppPackageDependency appPackageDependency = new AppPackageDependency { Name = dependency.Name, AppPackageDependencyName = dependency.DependencyName, AppPackageDependencyId = dependency.DependencyApplication, AppPackageMinimumVersion = dependency.MinimumVersion == null ? null : dependency.MinimumVersion.ToString(4), AppPackageMaximumVersion = dependency.MaximumVersion == null ? null : dependency.MaximumVersion.ToString(4), AppPackageIsRequired = dependency.IsRequired }; dependencies.Add(appPackageDependency); } package.DependentAppPackageDetails = dependencies; } package.Save( ); }