C# 如何创建 NuGet 包(.NET Core SDK)

Visual Studio 2022


1、创建class类库

1.1 新建Class类库 MySdk

1. Visual Studio中,选择新建>文件>”Project,搜索“class library”,选择 C# 的匹配模板。


2. 命名项目


3. 选择目标框架“.NET Standard 2.0


4. 根据需要创建一个工具类


5. 编辑 MySdk.csproj 文件


6. 根据实际需要,可以支持不同的 .NET 框架


<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>

    <TargetFrameworks>net472;netstandard2.0;net5.0;net6.0;</TargetFrameworks>

    <!-- package version -->

    <Authors>Author</Authors>

    <Company>Company</Company>

    <Description>MySdk library</Description>

    <Copyright>Copyright © 2022 YourCompany, All Rights Reserved.</Copyright>

    <PackageTags>tag1; tag2</PackageTags>

    <AssemblyVersion>1.0.0.0</AssemblyVersion>

    <FileVersion>1.0.0.0</FileVersion>

    <Version>1.0.0</Version>

    <NeutralLanguage>en-US</NeutralLanguage>

    <GenerateDocumentationFile>true</GenerateDocumentationFile>

  </PropertyGroup>

  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">

    <OutputPath>bin\Debug</OutputPath>

    <DocumentationFile>MySdk.xml</DocumentationFile>

  </PropertyGroup>

  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">

    <OutputPath>bin\Release</OutputPath>

    <DocumentationFile>MySdk.xml</DocumentationFile>

  </PropertyGroup>

</Project>


7. 打开“Developer PowerShell for VS 2022”,进入到项目目录下

cd "E:\docs\MySdk\MySdk"

dotnet pack MySdk.csproj -c Release


1.2 build工程

build项目工程之后可以看到程序及目录分别生成支持不同程序集框架的 dll


2、利用 NuGetPackageExplorer 工具进行打包

1. 打开 NuGetPackageExplorer 界面


2. 选择新建一个 package


3. 编辑好包的信息,并将新建 lib 文件夹,添加已经生成好的 dll 文件。


4. 可能会生成许多附加的 dll,只保留需要的即可,不需要关联的可以删除。


5. 相关的folder文件夹可以在鼠标右键空白处添加


lib\net472 指的是 MySdk 支持的目标框架是 .NET Framework 4.7.2这里根据实际情况添加,也可以支持多种目标框架版本。

保存为 MySdk.1.0.0.nupkg,这样一个nuget包就打包好了。


3、利用 dotnet 命令进行打包

在当前文件夹打开 cmd 命令,或者使用 cd 命令进入到当前目录

执行命令 dotnet pack MySdk.csproj,会在当前目录下自动创建 MySdk.1.0.0.nupkg


打包好的 nupkg 文件


4、 利用 .nuspec 文件进行打包

4.1 利用 nuget.exe 创建 .nuspec 文件

MySdk 工程目录下执行 cmd 命令,需要将 nuget.exe 复制到工程目录下。

执行 nuget.exe spec MySdk,会在当前目录下生成 MySdk.nuspec 文件,右键已文本文档打开,会看到 .nuspec 文件的格式,基于这个格式,也可以手动创建 .nuspec 文件。


编辑 MySdk.nuspec 文件的基本信息



<?xml version="1.0" encoding="utf-8"?>

<package >

  <metadata>

    <id>MySdk</id>

    <version>1.0.1</version>

    <authors>Author</authors>

    <owners></owners>

    <requireLicenseAcceptance>false</requireLicenseAcceptance>

    <description>MySdk library</description>

    <copyright>Copyright © 2022 YourCompany, All Rights Reserved.</copyright>

    <tags>tag1 tag2</tags>

    <dependencies>

      <group targetFramework=".NETFramework4.7.2">

        <dependency id="Newtonsoft.Json" version="12.0.1" exclude="Build,Analyzers" />

      </group>

      <group targetFramework="net5.0">

        <dependency id="Newtonsoft.Json" version="12.0.1" exclude="Build,Analyzers" />

      </group>

      <group targetFramework="net6.0">

        <dependency id="Newtonsoft.Json" version="12.0.1" exclude="Build,Analyzers" />

      </group>

      <group targetFramework=".NETStandard2.0">

        <dependency id="Newtonsoft.Json" version="12.0.1" exclude="Build,Analyzers" />

      </group>

    </dependencies>

    <frameworkAssemblies>

      <frameworkAssembly assemblyName="System.Web" targetFramework=".NETFramework4.7.2" />

    </frameworkAssemblies>

  </metadata>

  <files>

    <file src="bin\Debug\net472\MySdk.dll" target="lib\net472\MySdk.dll" />

    <file src="bin\Debug\net472\MySdk.xml" target="lib\net472\MySdk.xml" />

    <file src="bin\Debug\net5.0\MySdk.dll" target="lib\net5.0\MySdk.dll" />

    <file src="bin\Debug\net5.0\MySdk.xml" target="lib\net5.0\MySdk.xml" />

    <file src="bin\Debug\net6.0\MySdk.dll" target="lib\net6.0\MySdk.dll" />

    <file src="bin\Debug\net6.0\MySdk.xml" target="lib\net6.0\MySdk.xml" />

    <file src="bin\Debug\netstandard2.0\MySdk.dll" target="lib\netstandard2.0\MySdk.dll" />

    <file src="bin\Debug\netstandard2.0\MySdk.xml" target="lib\netstandard2.0\MySdk.xml" />

  </files>

</package>



执行命令 nuget.exe pack MySdk.nuspec -version 1.0.0,在当前目录下会生成 MySdk.1.0.0.nupkg 文件

-version nuget包发布的版本


4.2 更多nuget相关命令

https://learn.microsoft.com/en-US/nuget/reference/nuget-exe-cli-reference


5、上传包到NuGet服务器

执行 cmd 命令

dotnet nuget push MySdk.1.0.0.nupkg --source http://127.0.0.1:8053/nuget --api-key 123456

--source 指定服务器 URL

--api-key 目标存储库的 API 密钥。


也可以使用 nuget.exe 进行发布

nuget.exe push MySdk.1.0.0.nupkg -Source http://127.0.0.1:8053/nuget -ApiKey 123456

-Source 指定服务器 URL

-ApiKey 目标存储库的 API 密钥。


发布命令支持nuget.orgnuget私有仓库


通过 NuGetPackageExplorer 上传

选择“File->Publish


填写服务器地址及 ApiKey,点击发布


发布成功会有成功提示


Visual Studio 中浏览 NuGet 包信息


引用第三方NuGet

通常我们在开发类库的时候,难免引用其他 NuGet 包作为依赖使用,当引用其他 NuGet 包时,该如何打包我们自己的 NuGet 包?

1、在 MyPackage 引用 Newtonsoft.Json

Install-Package Newtonsoft.Json -Version 12.0.1

新建一个 json 的工具类

namespace MyPackage

{

    // 引用 Newtonsoft.Json.dll

    /// <summary>

    /// JsonTools

    /// </summary>

    public class JsonTools

    {

        /// <summary>

        /// 从一个对象信息生成Json 

        /// </summary>

        /// <param name="obj">对象</param>

        /// <returns></returns>

        public static string ObjectToJson(object obj)

        {

            return Newtonsoft.Json.JsonConvert.SerializeObject(obj);

        }

        /// <summary>

        ///  从一个Json串生成对象信息 

        /// </summary>

        /// <param name="jsonString">json字符串</param>

        /// <param name="obj"></param>

        /// <returns></returns>

        public static object JsonToObject(string jsonString, object obj)

        {

            return Newtonsoft.Json.JsonConvert.DeserializeObject(jsonString, obj.GetType());

        }

    }

}


修改 MyPackage 程序集版本号


2、通过编辑project文件来选择不同的NuGet


<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>

    <TargetFrameworks>net472;netstandard2.0;net5.0;net6.0;</TargetFrameworks>

    <!-- package version -->

    <Authors>Author</Authors>

    <Company>Company</Company>

    <Description>MySdk library</Description>

    <Copyright>Copyright © 2022 YourCompany, All Rights Reserved.</Copyright>

    <PackageTags>tag1; tag2</PackageTags>

    <AssemblyVersion>1.0.1.0</AssemblyVersion>

    <FileVersion>1.0.1.0</FileVersion>

    <Version>1.0.0</Version>

    <NeutralLanguage>en-US</NeutralLanguage>

    <GenerateDocumentationFile>true</GenerateDocumentationFile>

  </PropertyGroup>

  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">

    <OutputPath>bin\Debug</OutputPath>

    <DocumentationFile>MySdk.xml</DocumentationFile>

  </PropertyGroup>

  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">

    <OutputPath>bin\Release</OutputPath>

    <DocumentationFile>MySdk.xml</DocumentationFile>

  </PropertyGroup>

  <!-- dependencies -->

  <ItemGroup>

    <PackageReference Include="Newtonsoft.Json" Version="12.0.1" />

  </ItemGroup>

  <ItemGroup Condition="'$(TargetFramework)'=='net472'">

    <Reference Include="System.Web" />

  </ItemGroup>

</Project>



3、利用 NuGetPackageExplorer 工具进行打包

1. 打开 NuGetPackageExplorer 界面


2. 选择新建一个 package


3. 编辑好包的信息,并将新建 lib 文件夹,添加已经生成好的 dll 文件。


4. 相关的folder文件夹可以在鼠标右键空白处添加


lib\net472 指的是 MySdk 支持的目标框架是 .NET Framework 4.7.2这里根据实际情况添加,也可以支持多种目标框架版本。

保存为 MySdk.1.0.0.nupkg,这样一个nuget包就打包好了。


5. 添加第三方库


6. 添加依赖的 NuGet 包及版本


保存当前 MySdk.1.0.1.nupkg 文件


4、利用 dotnet 命令进行打包

在当前文件夹打开 cmd 命令,或者使用 cd 命令进入到当前目录

执行命令 dotnet pack MySdk.csproj,会在当前目录下自动创建 MySdk.1.0.0.nupkg



5、 利用 .nuspec 文件进行打包

5.1 利用 nuget.exe 创建 .nuspec 文件

MySdk 工程目录下执行 cmd 命令,需要将 nuget.exe 复制到工程目录下。

执行 nuget.exe spec MySdk,会在当前目录下生成 MySdk.nuspec 文件,右键已文本文档打开,会看到 .nuspec 文件的格式,基于这个格式,也可以手动创建 .nuspec 文件。


编辑 MySdk.nuspec 文件的基本信息


<?xml version="1.0" encoding="utf-8"?>

<package >

  <metadata>

    <id>MySdk</id>

    <version>1.0.1</version>

    <authors>Author</authors>

    <owners>Owner</owners>

    <requireLicenseAcceptance>false</requireLicenseAcceptance>

    <description>MySdk library</description>

    <copyright>Copyright © 2022 YourCompany. All Rights Reserved.</copyright>

    <language>en-US</language>

    <tags>MySdk</tags>

    <dependencies>

      <group targetFramework=".NETFramework4.7.2">

        <dependency id="Newtonsoft.Json" version="12.0.1" />

      </group>

      <group targetFramework="net5.0">

        <dependency id="Newtonsoft.Json" version="12.0.1" />

      </group>

      <group targetFramework="net6.0">

        <dependency id="Newtonsoft.Json" version="12.0.1" />

      </group>

      <group targetFramework=".NETStandard2.0">

        <dependency id="Newtonsoft.Json" version="12.0.1" />

      </group>

    </dependencies>

  </metadata>

  <files>

    <file src="bin\Debug\net472\MySdk.dll" target="lib\net472\MySdk.dll" />

    <file src="bin\Debug\net472\MySdk.xml" target="lib\net472\MySdk.xml" />

    <file src="bin\Debug\net5.0\MySdk.dll" target="lib\net5.0\MySdk.dll" />

    <file src="bin\Debug\net5.0\MySdk.xml" target="lib\net5.0\MySdk.xml" />

    <file src="bin\Debug\net6.0\MySdk.dll" target="lib\net6.0\MySdk.dll" />

    <file src="bin\Debug\net6.0\MySdk.xml" target="lib\net6.0\MySdk.xml" />

    <file src="bin\Debug\netstandard2.0\MySdk.dll" target="lib\netstandard2.0\MySdk.dll" />

    <file src="bin\Debug\netstandard2.0\MySdk.xml" target="lib\netstandard2.0\MySdk.xml" />

  </files>

</package>


执行命令 nuget.exe pack MySdk.nuspec -version 1.0.1,在当前目录下会生成 MySdk.1.0.1.nupkg 文件

-version nuget包发布的版本


5.2 更多nuget相关命令

https://learn.microsoft.com/en-US/nuget/reference/nuget-exe-cli-reference


6、上传包到NuGet服务器

执行 cmd 命令

dotnet nuget push MySdk.1.0.1.nupkg --source http://127.0.0.1:8053/nuget --api-key 123456

--source 指定服务器 URL

--api-key 目标存储库的 API 密钥。


也可以使用 nuget.exe 进行发布

nuget.exe push MySdk.1.0.1.nupkg -Source http://127.0.0.1:8053/nuget -ApiKey 123456

-Source 指定服务器 URL

-ApiKey 目标存储库的 API 密钥。


Visual Studio 中浏览 NuGet 包信息,安装引用时会自动安装依赖的第三方组件库。


作者最新文章
C# 实现字符串文本换行的方法,文本如何换行
C# 如何循环读取文件每一行文本内容
C# DateTime AddMonths 的错误用法导致跳过日期
C# 全角转换半角,半角转换为全角
C# Word 转换 PDF 文件,如何转换 PDF