2011-07-24 81 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); 
    }