This library is a work-in-progress set of utilities for working with Universal Packages and feeds.
Add a reference to Inedo.UPack using NuGet package manager.
Use the UniversalPackageBuilder class to create a new .upack file:
var metadata = new UniversalPackageMetadata
{
Group = "my/group",
Name = "MyPackage",
Version = UniversalPackageVersion.Parse("1.0.0"),
Title = "My Test Package",
Description = "This is where a useful description would go.",
["_customProperty"] = "I am a custom, extended property."
};
using (var builder = new UniversalPackageBuilder("MyPackage.upack", metadata))
{
// Recursively add all files and directories from C:\Test\MyFiles to the package
await builder.AddContentsAsync(@"C:\Test\MyFiles", "", true);
}Create an instance of the UniversalPackage class:
using (var package = new UniversalPackage("MyPackage.upack"))
{
}Access the properites on a UniversalPackage instance:
Console.WriteLine($"Package name: {package.Name}");
Console.WriteLine($"Package version: {package.Version}");
// The UniversalPackage class only provides basic metadata.
// To get a copy of all metadata, call the GetFullMetadata method.
var fullMetadata = package.GetFullMetadata();
Console.WriteLine($"Package title: {fullMetadata.Title}");Use the ExtractContentItemsAsync method on a UniversalPackage instance:
await package.ExtractContentItemsAsync(@"C:\Test\UnpackedPackage");Use the GetRegistry method on the PackageRegistry class:
using (var registry = PackageRegistry.GetRegistry(true /*true for user registry*/))
{
}Lock the package registry and call the RegisterPackageAsync method on a PackageRegistry instance:
await registry.LockAsync();
await registry.RegisterPackageAsync(
new RegisteredPackage
{
Group = "my/group",
Name = "MyPackage",
Version = "1.0.0",
InstallPath = @"C:\Test\UnpackedPackage",
InstallationDate = DateTimeOffset.Now.ToString("o"),
InstallationReason = "No reason - just a test!",
InstalledUsing = "My upack client",
InstalledBy = "Steve"
}
);Call the GetInstalledPackagesAsync method on a PackageRegistry instance:
foreach (var p in await registry.GetInstalledPackagesAsync())
Console.WriteLine($"{p.Name} {p.Version}");Create a new instance of the UniversalFeedClient class:
var feed = new UniversalFeedClient("http://upack.example.com/feed");Call ListPackagesAsync on a UniversalFeedClient instance:
var packages = await feed.ListPackagesAsync("my/group", null);Call GetPackageStreamAsync on a UniversalFeedClient instance to get a stream:
using (var packageStream = await feed.GetPackageStreamAsync(UniversalPackageId.Parse("my/group/MyPackage"), UniversalPackageVersion.Parse("1.0.0")))
using (var fileStream = File.Create(@"C:\Test\DownloadedPackage.upack"))
{
await packageStream.CopyToAsync(fileStream);
}Call UploadPackageAsync on a UniversalFeedClient instance:
using (var fileStream = File.OpenRead(@"C:\Test\SourcePackage.upack"))
{
await feed.UploadPackageAsync(fileStream);
}