Подтвердить что ты не робот

Как создать пакет NuGet с помощью NuGet.Core?

Я хотел бы создать приложение, которое использует пакет NuGet NuGet.Core. У этого есть класс, названный PackageBuilder, который делает это возможным. Есть ли доступный образец/учебник/документация?

4b9b3361

Ответ 1

Я не знаю ни одного учебника или документации о том, как создать пакет NuGet с помощью NuGet.Core. Вместо этого я бы посмотрел исходный код для NuGet.exe. Он имеет команду pack, которая создает пакет из файла .nuspec. Класс PackCommand, который использует класс PackageBuilder, должен показать вам, что вам нужно делать.

Ответ 2

Действительно простой пример:

  • создайте папку, содержащую нужные вам файлы.
  • Напишите код такой:

    
    ManifestMetadata metadata = new ManifestMetadata()
        {
            Authors = "mauvo",
            Version = "1.0.0.0",
            Id =  "myPackageIdentifier",
            Description = "A description",
        };
    
    PackageBuilder builder = new PackageBuilder();
    builder.PopulateFiles("folderPath/", new[] {new ManifestFile() {Source = "**"}});
    builder.Populate(metadata);
    using(FileStream stream = File.Open(packagePath, FileMode.OpenOrCreate))
    {
        builder.Save(stream);
    }
    

Ответ 3

Улучшенный пример, основанный на коде Дэвида. Изменения:

  • Все файлы в папке, кроме *.nuspec, добавляются в пакет.
  • Строка, определяющая имя файла пакета.

    ManifestMetadata metadata = new ManifestMetadata()
    {
        Authors = "mauvo",
        Version = "1.0.0.0",
        Id =  "myPackageIdentifier",
        Description = "A description",
    };
    
    PackageBuilder builder = new PackageBuilder();
    var files = Directory.GetFiles(packagePath, "*", SearchOption.AllDirectories)
        .Where(f => !f.EndsWith(".nuspec"))
        .Select(f => new ManifestFile { Source = f, Target = f.Replace(path, "") })
        .ToList();
    builder.PopulateFiles("", files);
    builder.Populate(metadata);
    string packageFile = Path.Combine(packagePath, builder.GetFullName()) + ".nupkg";
    using(FileStream stream = File.Open(packageFile, FileMode.OpenOrCreate))
    {
        builder.Save(stream);
    }