internal ContentImporterContext(BuildContent buildTask, string intermediateDirectory, string outputDirectory, ContentBuildLogger logger) { this.buildTask = buildTask; this.intermediateDirectory = intermediateDirectory; this.outputDirectory = outputDirectory; this.logger = logger; }
private bool XNA_Build_Execute(EditorApplication packageCopy, BuildContent build, IList<XNACirrusAsset> sourceAssets) { // the RootDirectory must contain the sourceFile to avoid an "%0" from being appended to the // output file name // var computedRootDirectory = String.IsNullOrEmpty(packageCopy.CurrentPackage.BuildRootRelativeDirectory) ? GetContentBaseDirectory(packageCopy) : Path.Combine(GetContentBaseDirectory(packageCopy), packageCopy.CurrentPackage.BuildRootRelativeDirectory); Environment.CurrentDirectory = build.RootDirectory = computedRootDirectory; build.IntermediateDirectory = XNAIntermediateDirectory; build.LoggerRootDirectory = null; build.SourceAssets = (from sourceAsset in sourceAssets select sourceAsset.TaskItem).ToArray(); for (int i = 0; i < sourceAssets.Count; ++i) { build.SourceAssets[i] = sourceAssets[i].TaskItem; } //const string xnaVersion = ", Version=2.0.0.0, PublicKeyToken=6d5c3888ef60e27d"; // TODO: Why is "Culture" required? //const string xnaVersion = ", Version=3.0.0.0, Culture=neutral, PublicKeyToken=6d5c3888ef60e27d"; // Don't append .dll??? if loading from the GAC build.PipelineAssemblies = (from xnaReference in packageCopy.CurrentPackage.XNAReferences select new TaskItem(ParseReferencePath(packageCopy, xnaReference.Reference))).ToArray(); try { return build.Execute(); } catch (Exception e) { Build_Message(e.Message, e.Source, BuildMessageSeverity.Error); return false; } }
private bool Build_Execute(EditorApplication packageCopy, string contextId, bool rebuild, bool compress, Predicate<EditorContentFile> filesFilter = null, List<string> callTree = null, List<string> builtPackages = null) { /* callTree is used to identify circular references */ if (callTree == null) callTree = new List<string>(); /* builtPackages is used to skip the recompilation of an already processed package reference */ if (builtPackages == null) builtPackages = new List<string>(); callTree.Add(packageCopy.CurrentPackagePath); /* first, processes referenced package */ foreach (var packageReference in packageCopy.CurrentPackage.CirrusReferences) { if (!String.IsNullOrEmpty(packageReference.Reference)) { if (packageReference.Build) { var referencePath = ParseReferencePath(packageCopy, packageReference.Reference); if (!ProcessPackageReference(packageCopy, referencePath, contextId, rebuild, compress, filesFilter, callTree, builtPackages)) return false; } else { Build_Message(String.Format("--- Ignore --- The package {0} has been ignored because not marked for Build", packageReference.Reference), "PackageReferenceCondition", BuildMessageSeverity.Information); } } } /* then process the current package*/ var decodedAssets = new List<XNACirrusAsset>(); bool success = Build_ActionForAllFiles(packageCopy, (file) => { if (filesFilter == null || filesFilter(file)) { Build_ProcessFile(decodedAssets, packageCopy, file); } else Build_Message("-- Skipped by filter"); return true; }); if (success) { var build = new BuildContent(); // BuildEngine is used by TaskLoggingHelper, so an implementation must be provided // build.BuildEngine = new BuildEngine(this); build.RebuildAll = rebuild; build.CompressContent = compress; build.TargetProfile = GraphicsProfile.HiDef.ToString(); build.BuildConfiguration = "Debug"; build.TargetPlatform = TargetPlatform.Windows.ToString(); build.OutputDirectory = XNAOutputDirectory; if (decodedAssets.Count > 0) { success = XNA_Build_Execute(packageCopy, build, decodedAssets); } builtPackages.Add(packageCopy.CurrentPackagePath); } return success; }