65.9K
CodeProject 正在变化。 阅读更多。
Home

让 NuGet 为您的公司服务

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.69/5 (11投票s)

2013年7月26日

CPOL

7分钟阅读

viewsIcon

26383

NuGet 允许您将包添加到项目中,无论是从公共包库还是从您自己的私有包库。后者,至少在我看来,在商业世界中被低估和误解。本文旨在阐明 NuGet 如何为您的公司服务。

引言

NuGet 是 .NET Framework 的包管理器工具。NuGet 是免费的、开源的,并得到 Microsoft Visual Studio 以及其他一些环境的支持。

NuGet 允许您将包添加到项目中,无论是从公共包库还是从您自己的私有包库。后者,至少在我看来,在商业世界中被低估和误解。本文旨在阐明 NuGet 如何为您的公司服务。

公共库

如果您以前没有使用过 NuGet,您就错失良机了。NuGet 允许您通过将第三方代码/工具添加到您的项目中来扩展应用程序的功能。NuGet 公共库上托管的大部分项目都是免费的(是的,免费的商业软件!),并且是开源的。

您可以通过两种方式访问 NuGet,一种是使用库包管理器界面,另一种是通过程序包管理器控制台窗口。

要打开库包管理器,请点击“工具”>“库包管理器”>“为解决方案管理 NuGet 包…”

NuGet package manager

要安装包,只需单击它并点击“安装”。您可以使用搜索字段(右上角)轻松搜索包。有成千上万个免费包。

私有库(又名私有存储库)

那么什么是私有 NuGet 库?私有 NuGet 库是您自己托管的库。该库可以位于您的本地计算机上,或者位于您的公司网络上的某个位置。实际上没有什么可以阻止您托管自己的公共库。

那么托管自己的私有库有什么好处呢?好吧,这最好通过一个场景来回答。想象一下,您正在为各种客户开发多个网站,这些客户有很多共同的代码。您不想重复代码,因此您创建一个库并将共享代码放在该库中。然后每个项目都会引用该库。这是一个非常常见的场景,并且非常普遍。但是,如果您的公共代码存在于源代码存储库的其他分支中呢?如果每个网站都有自己的分支呢?那么每次更新库时,您都需要手动将程序集合并到其他分支中。NuGet 极大地简化了这个过程,因为您只需发布并更新到您的库,每个网站都可以选择是否更新。有些网站可能不想更新,可能是因为存在破坏性更改。每个项目都可以决定是否更新。

创建 NuGet 包

每一个好的包都始于一个好的库。您可能已经对要打包的库有了一些想法。为了演示,我们将使用一个名为 *JPreeceDev.Shared.dll* 的共享库。这个共享库由一个名为 `Repository` 的类和一个名为 `IRepository` 的接口组成。

public interface IRepository
{
    bool Save();
}
 
public class Repository : IRepository
{
    public bool Save()
    {
        return true;
    }
} 

要创建您的包,首先您需要一个名为 NuGet Command Line bootstrapper 的小程序。下载后,您可以为其添加环境变量,或者在命令提示符窗口中直接指向完整路径。

此时,您可以采取几种不同的方法,这 realmente 取决于您的偏好、内部流程或源代码控制设置。为了简单起见,我将在与项目文件夹相同的级别创建一个名为“*NuGet Packages*”的新目录。在此文件夹内,我将创建一个名为 *JPreeceDev.Shared* 的子文件夹,所有 NuGet 包的组件都将在此文件夹中。您可能需要:在源代码控制中创建一个专用的 NuGet 包分支,或者在开发分支中添加一个专门用于 NuGet 包的新文件夹。

打开命令提示符,将工作目录切换到 NuGet 包/您的项目文件夹,然后运行以下命令

nuget spec

这将输出一个非常通用的 *Package.nuspec* 文件,其中包含一些简单的 XML。在您喜欢的文本编辑器中打开该文件,并用一些适当的信息编辑 XML。这是我的示例

<?xml version="1.0"?>
<package>
  <metadata>
    <id>JPreeceDev.Shared</id>
    <version>1.0.0</version>
    <authors>Jon Preece</authors>
    <owners>Jon Preece</owners>
    <licenseUrl>https://codeproject.org.cn/info/cpol10.aspx</licenseUrl>
    <projectUrl>http://www.jpreecedev.com</projectUrl>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>JPreeceDev.com Shared Code Library</description>
    <releaseNotes>First release.</releaseNotes>
    <copyright>Copyright Jon Preece 2013</copyright>
    <tags>jpreece shared</tags>
  </metadata>
</package> 

我还喜欢重命名文件,使其对我的项目更有意义。我将把 *Package.nuspec* 重命名为 *JPreeceDev.Shared.nuspec*。

现在您需要引入您的库文件。首先,在与您的 *nuspec* 文件相同的级别创建一个名为 'lib' 的新文件夹。在此文件夹内,您需要创建另一个文件夹,该文件夹告诉 NuGet 您的库针对哪个版本的 .NET Framework。在这种情况下,通过添加一个名为 NET4.5 的文件夹来针对 .NET Framework 4.5。

将您的库放入该文件夹。

接下来,返回命令提示符并运行以下命令

nuget pack

这将输出您的 NuGet 包,文件扩展名为 *.nupkg*。您的简单 NuGet 包现已完成,您可以开始通知 NuGet 关于您的私有库了。

将您的私有库添加到可用包源列表

下一步是告知 NuGet 您刚刚创建的私有库。这样,当您以后搜索要添加到项目中的 NuGet 包时,NuGet 就会知道在哪里查找。

打开 Visual Studio,点击“工具”>“选项”>“程序包管理器”>“包工具”。单击“添加”按钮(右上角),为您的包源命名(在本例中为“本地 NuGet 包”),然后将路径设置回您之前创建的“NuGet 包”文件夹。

单击“更新”,然后单击“确定”以保存更改。现在启动您要使用该库的项目,打开库包管理器,并注意您的私有库现在在“联机”选项卡下可用。

要将包添加到您的项目,只需单击“安装”并接受许可协议。

请注意,引用已添加到您的项目中,并且库中的代码可以像平常一样使用。

更新

因此,如果您一直在 Visual Studio 中关注,您可能会想“这太费力了,我还是坚持我目前使用的流程吧,因为我熟悉它并且知道它有效。” 那么请继续关注我,因为这正是 NuGet 发挥作用的地方……更新包时。

假设已经过了一段时间,您对共享库进行了一些更改。您对您的更改感到满意,并且相信您的库相对没有 bug,所以是时候将更新推送到使用该库的所有项目中了。

打开 *NuSpec* 文件(在本例中为 *JPreeceDev.Shared.nuspec*),并递增次要版本号,并添加一些发布注释。现在将您的共享库 DLL (*JPreeceDev.Shared.dll*) 复制过去,然后启动命令提示符。再次运行 NuGet pack 命令。

nuget pack

NuGet 创建了一个新包,该新包会附加新的版本号。

再次启动您的项目,如果您没有自动收到更新提示,请打开库包管理器并单击“更新”选项卡。

如您所见,您的项目现在可以进行更新。继续单击“更新”按钮以完成更新。已更新的程序集已添加到您的项目中。很简单,不是吗?

高级主题 (Advanced Topics)

在本教程中,我们仅介绍了如何创建简单的 NuGet 包。您还可以利用更高级的功能来为您的包添加额外的功能。

  • 在安装/卸载操作时运行 PowerShell 脚本
  • 向目标项目添加依赖项(例如,程序集引用)

……以及更多。

摘要

NuGet 是一个包管理器工具,它允许我们轻松地将第三方程序集/工具添加到我们的项目中。NuGet 还可以自动或手动更新这些工具,以便我们始终将最新(或最合适)的版本添加到我们的项目中。我们可以将自己的 NuGet 包托管在私有库中,NuGet 可以按照我们期望的方式将它们提供给我们。这在我们需要在多个项目/分支之间共享代码,并且不想在每次更改时手动更新共享代码引用时特别有用。

历史

  • 25/7/13 - 首次发布
© . All rights reserved.