/// <summary> /// Create a <see cref="Package"/> that can be used to compile an <see cref="AssetItem"/> by analyzing and resolving its dependencies. /// </summary> /// <returns>The package packageSession that can be used to compile the asset item.</returns> public static Package CreateCompilePackageFromAsset(this PackageSession session, AssetItem originalAssetItem) { // create the compile root package and package session var assetPackageCloned = new Package(); //the following line is necessary to attach a session to the package // ReSharper disable once UnusedVariable var compilePackageSession = new PackageSession(assetPackageCloned); AddAssetToCompilePackage(session, originalAssetItem, assetPackageCloned); return(assetPackageCloned); }
public static void AddAssetToCompilePackage(this PackageSession session, AssetItem originalAssetItem, Package assetPackageCloned) { if (originalAssetItem == null) { throw new ArgumentNullException("originalAssetItem"); } // Find the asset from the session var assetItem = originalAssetItem.Package.FindAsset(originalAssetItem.Id); if (assetItem == null) { throw new ArgumentException("Cannot find the specified AssetItem instance in the session"); } // Calculate dependencies // Search only for references var dependencies = session.DependencyManager.ComputeDependencies(assetItem.Id, AssetDependencySearchOptions.Out | AssetDependencySearchOptions.Recursive, ContentLinkType.Reference); if (dependencies == null) { throw new InvalidOperationException("The asset doesn't exist in the dependency manager anymore"); } var assetItemRootCloned = dependencies.Item.Clone(); // Store the fullpath to the sourcefolder, this avoid us to clone hierarchy of packages assetItemRootCloned.SourceFolder = assetItem.FullPath.GetParent(); if (assetPackageCloned.Assets.Find(assetItemRootCloned.Id) == null) { assetPackageCloned.Assets.Add(assetItemRootCloned); } // For each asset item dependency, clone it in the new package foreach (var assetLink in dependencies.LinksOut) { // Only add assets not already added (in case of circular dependencies) if (assetPackageCloned.Assets.Find(assetLink.Item.Id) == null) { // create a copy of the asset item and add it to the appropriate compile package var itemCloned = assetLink.Item.Clone(); // Store the fullpath to the sourcefolder, this avoid us to clone hierarchy of packages itemCloned.SourceFolder = assetLink.Item.FullPath.GetParent(); assetPackageCloned.Assets.Add(itemCloned); } } }
public abstract IEnumerable <string> Select(PackageSession packageSession, IContentIndexMap contentIndexMap);
protected AssetTracker(PackageSession session) { this.session = session; }
/// <summary> /// Performs the second step of package migration, after assets have been loaded. /// </summary> /// <param name="loadParameters">The load parameters.</param> /// <param name="session">The session.</param> /// <param name="log">The log.</param> /// <param name="dependentPackage">The source package.</param> /// <param name="dependency">The dependency.</param> /// <param name="dependencyPackage">The dependency package.</param> /// <param name="dependencyVersionBeforeUpdate">The version before the update.</param> /// <returns></returns> public virtual bool UpgradeAfterAssetsLoaded(PackageLoadParameters loadParameters, PackageSession session, ILogger log, Package dependentPackage, PackageDependency dependency, Package dependencyPackage, PackageVersionRange dependencyVersionBeforeUpdate) { return(true); }
/// <summary> /// Performs the package migration, before assets are loaded /// </summary> /// <param name="loadParameters">The load parameters.</param> /// <param name="session">The session.</param> /// <param name="log">The log.</param> /// <param name="dependentPackage">The source package.</param> /// <param name="dependency">The dependency.</param> /// <param name="dependencyPackage">The dependency package.</param> /// <param name="assetFiles">The asset files.</param> /// <returns></returns> public abstract bool Upgrade(PackageLoadParameters loadParameters, PackageSession session, ILogger log, Package dependentPackage, PackageDependency dependency, Package dependencyPackage, IList <PackageLoadingAssetFile> assetFiles);
/// <summary> /// Performs a preprocessing step of package migration, before assembly references are loaded. /// </summary> /// <param name="loadParameters">The load parameters.</param> /// <param name="session">The session.</param> /// <param name="log">The log.</param> /// <param name="dependentPackage">The source package.</param> /// <param name="dependency">The dependency.</param> /// <param name="dependencyPackage">The dependency package.</param> /// <returns></returns> public virtual bool UpgradeBeforeAssembliesLoaded(PackageLoadParameters loadParameters, PackageSession session, ILogger log, Package dependentPackage, PackageDependency dependency, Package dependencyPackage) { return(true); }