如何使用 NuGet.Core 创建 NuGet 包?

Posted

技术标签:

【中文标题】如何使用 NuGet.Core 创建 NuGet 包?【英文标题】:How to create a NuGet Package using NuGet.Core? 【发布时间】:2011-10-12 03:20:35 【问题描述】:

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

【问题讨论】:

似乎唯一的文档是one blog post。对于试图使用图书馆的人来说,这还不够。 礼貌地索取文件github.com/NuGet/Home/issues/2425 【参考方案1】:

一个非常简单的例子:

    创建一个文件夹,其中包含您想要在包中包含的文件。

    这样写一些代码:

    
    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);
    
    

【讨论】:

为什么这不是公认的答案?当前的答案似乎更像是评论。 新的 NuGet.Packaging 包中的大部分功能都可以实现,因为 Nuget.Core 不再存在。【参考方案2】:

基于 David 代码的改进示例。变化:

文件夹中除 *.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);

【讨论】:

以上是关于如何使用 NuGet.Core 创建 NuGet 包?的主要内容,如果未能解决你的问题,请参考以下文章

Nuget依赖项 - 如何在linux上显示NuGet的package.config依赖项树

如何使用跨平台工具创建 NuGet 包(转)

如何使用使用不同选项构建的 C# 和 C++ 库创建 Nuget 包?

如何在 Azure Devops 中使用 msbuild 创建具有发布和调试配置的 nuget 文件

如何在创建nuget包时使用-NoDefaultExcludes

如何调试我创建的 NuGet 包中的代码