4 using System.Collections.Generic;
6 using SiliconStudio.Core.IO;
8 namespace SiliconStudio.Assets
12 public static void Build(
Package package,
string outputDirectory = null)
14 if (package == null)
throw new ArgumentNullException(
"package");
16 var meta =
new NuGet.ManifestMetadata();
17 package.Meta.ToNugetManifest(meta);
19 var builder =
new NuGet.PackageBuilder();
20 builder.Populate(meta);
23 var files =
new List<NuGet.ManifestFile>()
25 NewFile(
@"Bin\**\*.exe",
"Bin"),
26 NewFile(
@"Bin\**\*.vsix",
"Bin"),
27 NewFile(
@"Bin\**\*.so",
"Bin"),
28 NewFile(
@"Bin\**\*.a",
"Bin"),
29 NewFile(
@"Bin\**\*.md",
"Bin"),
30 NewFile(
@"Bin\**\*.html",
"Bin"),
31 NewFile(
@"Bin\**\*.config",
"Bin"),
32 NewFile(
@"Bin\**\*.dll",
"Bin"),
33 NewFile(
@"Bin\**\*.xml",
"Bin"),
34 NewFile(
@"Bin\**\*.winmd",
"Bin"),
35 NewFile(
@"Targets\*.targets",
"Targets"),
39 var rootDir = package.RootDirectory;
41 var newPackage =
new Package { Meta = package.Meta };
43 foreach (var profile
in package.Profiles)
45 var target =
"Assets/" + profile.Name;
46 foreach (var assetFolder
in profile.AssetFolders)
50 files.Add(NewFile(assetFolder.Path.MakeRelative(rootDir) +
"/**/*.pdxsl", target));
51 files.Add(NewFile(assetFolder.Path.MakeRelative(rootDir) +
"/**/*.pdxfx", target));
55 files.Add(NewFile(
@"sources\shaders\SiliconStudio.Paradox.Shaders.csproj", target));
56 files.Add(NewFile(
@"sources\shaders\SiliconStudio.Paradox.Shaders.sln", target));
59 targetProfile.AssetFolders.Add(
new AssetFolder(target));
60 newPackage.Profiles.Add(targetProfile);
66 foreach (var templateFolder
in package.TemplateFolders)
68 var source = templateFolder.Path.MakeRelative(rootDir) +
"/**";
70 if (templateFolder.Group != null)
72 target = UPath.Combine(target, templateFolder.Group);
75 var excludeFiles = templateFolder.Exclude;
76 files.Add(NewFile(source, target, excludeFiles));
79 foreach (var templateFile
in templateFolder.Files)
81 var newTemplateFile = templateFile.MakeRelative(templateFolder.Path);
82 if (templateFolder.Group != null)
84 newTemplateFile = UPath.Combine(templateFolder.Group, newTemplateFile);
87 newTemplateFile = UPath.Combine(targetFolder.Path, newTemplateFile);
88 targetFolder.Files.Add(newTemplateFile);
93 newPackage.TemplateFolders.Add(targetFolder);
94 var newPackageFileName =
"temp" + Guid.NewGuid() +
".pdxpkg";
95 newPackage.FullPath = package.RootDirectory +
"/" + newPackageFileName;
96 var result = newPackage.Save();
99 throw new InvalidOperationException(result.ToText());
105 builder.PopulateFiles(package.RootDirectory, files);
107 outputDirectory = outputDirectory ?? Environment.CurrentDirectory;
110 var outputPath = GetOutputPath(builder, outputDirectory);
111 bool isExistingPackage = File.Exists(outputPath);
112 if (isExistingPackage)
114 File.Delete(outputPath);
118 using (
Stream stream = File.Create(outputPath))
120 builder.Save(stream);
125 if (!isExistingPackage &&
File.Exists(outputPath))
127 File.Delete(outputPath);
132 File.Delete(newPackage.FullPath);
135 private static NuGet.ManifestFile NewFile(
string source,
string target,
string exclude = null)
137 return new NuGet.ManifestFile()
139 Source = source.Replace(
'/',
'\\'),
140 Target = target.Replace(
'/',
'\\'),
145 private static string GetOutputPath(NuGet.PackageBuilder builder,
string outputDirectory)
147 string version = builder.Version.ToString();
150 string outputFile = builder.Id +
"." + version;
151 outputFile += NuGet.Constants.PackageExtension;
153 return Path.Combine(outputDirectory, outputFile);
static void Build(Package package, string outputDirectory=null)
A location relative to a package from where assets will be loaded
Defines a normalized directory path. See UPath for details. This class cannot be inherited.
const string PackageFileExtension
The file extension used for Package.
Describes a template folder.
Describes buld parameters used when building assets.
A package managing assets.