public MetaPackScenarioTestBase() { var useSPMeta2Provider = true; var useSharePointPnPProvider = false; var files2delete = new List <string>(); files2delete.AddRange(Directory.GetFiles(Directory.GetCurrentDirectory(), "SPMeta2.CSOM**dll")); files2delete.AddRange(Directory.GetFiles(Directory.GetCurrentDirectory(), "Microsoft.SharePoint.Client**dll")); foreach (var f in files2delete) { try { System.IO.File.Delete(f); } catch (Exception e) { } } var regressionTraceService = new RegressionTraceService(); SPMeta2SolutionPackagingService = new SPMeta2SolutionPackageService(); SharePointPnPSolutionPackagingService = new SharePointPnPSolutionPackageService(); MetaPackServiceContainer.Instance.ReplaceService(typeof(TraceServiceBase), regressionTraceService); UseLocaNuGet = true; InitEnvironmentVariables(); SPMeta2ServiceContext = new MetaPackServiceContext { PackagingService = new SPMeta2SolutionPackageService(), DeploymentService = new SPMeta2SolutionPackageDeploymentService(), ToolPackage = new SolutionToolPackage { Id = "MetaPack.SPMeta2" }, CIPackageId = "MetaPack.SPMeta2.CI" }; SharePointPnPServiceContext = new MetaPackServiceContext { PackagingService = new SharePointPnPSolutionPackageService(), DeploymentService = new SharePointPnPSolutionDeploymentService(), ToolPackage = new SolutionToolPackage { Id = "MetaPack.SharePointPnP" }, CIPackageId = "MetaPack.SharePointPnP.CI" }; //if (!Environment.Is64BitProcess) // throw new Exception("x64 process is requred. VS -> Test -> Test Settings -> Default process architecture -> x64"); // packaging MetaPackService = new List <MetaPackServiceContext>(); if (useSPMeta2Provider) { MetaPackService.Add(SPMeta2ServiceContext); } if (useSharePointPnPProvider) { MetaPackService.Add(SharePointPnPServiceContext); } var localAssemblyDirectoryPath = Path.GetDirectoryName(GetType().Assembly.Location); var localNuGetFolder = Path.GetFullPath(localAssemblyDirectoryPath + @"\..\..\..\Build\local-ci-packages"); LocalNuGetRepositoryFolderPath = localNuGetFolder; Directory.CreateDirectory(LocalNuGetRepositoryFolderPath); if (UseLocaNuGet) { var toolResolutionService = new ToolResolutionService(); toolResolutionService.PackageSources.Add(LocalNuGetRepositoryFolderPath); // environment varioable must go first so that we can override stuff toolResolutionService.InitPackageSourcesFromGetEnvironmentVariable("MetaPack.NuGet.Galleries", EnvironmentVariableTarget.Machine); toolResolutionService.InitPackageSourcesFromGetEnvironmentVariable("MetaPack.NuGet.Galleries", EnvironmentVariableTarget.User); toolResolutionService.InitPackageSourcesFromGetEnvironmentVariable("MetaPack.NuGet.Galleries", EnvironmentVariableTarget.Process); toolResolutionService.InitPackageSourcesFromString(ConfigurationManager.AppSettings["NuGet.Galleries"]); toolResolutionService.RefreshPackageManager(); MetaPackServiceContainer.Instance.RegisterService(typeof(ToolResolutionService), toolResolutionService); } }
public void Create_Package_PnP() { // A high level abstraction for solution package. // Follows NuGet spec design - https://docs.nuget.org/ndocs/schema/nuspec // Solution package is a container for SERIALIZED models. // It means that solution package does not depend on a particular API oe assembly so that models have to be in serialazable, platform and api independent way. var solutionPackage = new SolutionPackageBase(); solutionPackage.Name = "Contoso Intranet PnP - Site Fields"; solutionPackage.Title = "Contoso Intranet PnP - Site Fields"; solutionPackage.Description = "Contains site level fields for Contoso intranet"; solutionPackage.Id = "Contoso.Intranet.SiteFields.PnP"; solutionPackage.Authors = "SubPoint Solutions"; solutionPackage.Company = "SubPoint Solutions"; solutionPackage.Version = "1.0.0.0"; solutionPackage.Owners = "SubPoint Solutions"; solutionPackage.ReleaseNotes = "Initial set of the site fields for Contoso Intranet"; solutionPackage.Summary = "All site fields required for Contoso intranet"; solutionPackage.ProjectUrl = "https://github.com/SubPointSolutions/DefinitelyPacked"; solutionPackage.IconUrl = "https://github.com/SubPointSolutions/metapack/metapack.png"; solutionPackage.LicenseUrl = "https://opensource.org/licenses/MIT"; solutionPackage.Copyright = "All yours"; solutionPackage.Tags = "MetaPack SPMeta2 SiteFields Taxonomy"; // create a new ModelContainerBase for every SharePointPnP solution // * currently only OpenXML PnP packages as supported // then add to solution package // you can put "Order" option to control deployment order of the models // all your SharePointPnP OpenXML packages var allPnPOpenXmlFiles = new List <string>(); for (var index = 0; index < allPnPOpenXmlFiles.Count; index++) { var pnpPackageFilePath = allPnPOpenXmlFiles[index]; var pnpPackageBytes = System.IO.File.ReadAllBytes(pnpPackageFilePath); var modelContainer = new ModelContainerBase { Model = pnpPackageBytes }; // add sort order to control deployment order of the models modelContainer.AdditionalOptions.Add(new OptionValue { Name = DefaultOptions.Model.Order.Id, Value = index.ToString() }); // add type of the SharePointPnP package // current only OpenXml is supoported modelContainer.AdditionalOptions.Add(new OptionValue { Name = DefaultOptions.Model.Type.Id, Value = "SharePointPnP.OpenXml" }); // add model container to solution solutionPackage.AddModel(modelContainer); } // flag a provider which will be used for solution package deployment solutionPackage.AdditionalOptions.Add(new OptionValue { Name = DefaultOptions.SolutionToolPackage.PackageId.Id, Value = "MetaPack.SharePointPnP" }); var solutionPackageService = new SharePointPnPSolutionPackageService(); // save your NuGet solution package as stream var nuGetPackageStream = solutionPackageService.Pack(solutionPackage, null); // or save it straight to file, for instance, on shared folder solutionPackageService.PackToFile(solutionPackage, "Contoso.Intranet.SiteFields.PnP.nupkg"); // or push it straight to NuGet gallery you've got - http://NuGet.org or http://MyGet.org // follow instructions on how obtain Url/Key for a specific NuGet Gallery var nuGetGallery_ApiUrl = ""; var nuGetGallery_ApiKey = ""; solutionPackageService.Push(solutionPackage, nuGetGallery_ApiUrl, nuGetGallery_ApiKey); }