2011-07-24 46 views
19

我想创建一个使用NuGet包NuGet.Core的应用程序。 它有一个名为PackageBuilder的类,使它成为可能。是否有任何示例/教程/文档可用?如何使用NuGet.Core创建NuGet包?

+0

这似乎唯一的文档[一个博客文章(http://blog.nuget.org/20130520/Play-with-packages.html)。这对试图使用图书馆的人来说已经不够了。 –

+0

礼貌请求文档https://github.com/NuGet/Home/issues/2425 –

回答

2

我不知道如何使用NuGet.Core构建NuGet包的任何教程或文档。相反,我会看看NuGet.exe的源代码。它有一个命令,该命令从.nuspec文件构建一个包。使用PackageBuilder类的PackCommand class应该告诉你你需要做什么。

+0

我在Nuget.Core中找不到PackCommand。你能帮我吗? – Rookian

+0

PackCommand位于NuGet.exe程序集的NuGet.Commands命名空间中。 –

32

一个很简单的例子:

  1. 创建一个包含在你的包,你想要的文件的文件夹。
  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); 
    } 
    
+0

为什么这不是被接受的答案?目前的答案似乎更像是一条评论。 – glopes

7

改进例如基于大卫的代码。更改:

  • 除* .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); 
    }