注意:建议使用 Visual Studio 2017 来开发 .NET Standard 库。 Visual Studio 2015 可以工作,但 .NET Core 工具仅处于预览状态。 有关使用 NuGet 4.x+ 和 Visual Studio 2017 的详细信息,请参阅使用 Visual Studio 2017 创建和发布包。
.NET Standard 库是一套正式的 .NET API 规范,有望在所有 .NET 运行时推出,借此在 .NET 生态系统中建立更强的一致性。 .NET Standard 库为要实现的所有 .NET 平台定义一组统一的、与工作负荷无关的 BCL(基类库)API。 它使得开发人员可以生成跨所有 .NET 运行时可用的代码,并减少(如果不能消除)共享代码中平台特定的条件编译指令。
本指南将为你逐步介绍如何创建面向 .NET Standard 库 1.4 的 NuGet 包或面向 .NET Framework 4.6 的包。 .NET Standard 1.4 库可在 .NET Framework 4.6.1、通用 Windows 平台 10、.NET Core 和 Mono/Xamarin 上使用。 有关详细信息,请参阅 .NET Standard 映射表(.NET 文档)。 如果需要,可以选择其他版本的 .NET Standard 库。
先决条件
Visual Studio 2015 Update 3
(仅适用于 .NET Standard).NET Core SDK
NuGet CLI。 从 nuget.org/downloads 下载 nuget.exe 的最新版本,将其保存到选择的位置。 然后将该位置添加到 PATH 环境变量(如果尚未添加)。
注意
nuget.exe 是 CLI 工具本身,不是安装程序,因此一定要保存从浏览器下载的文件,而非运行。
创建类库项目
在Visual Studio,文件>新建>Project,展开 Visual C# > Windows节点,选择“类库” (可移植) ,将名称更改为 AppLogger,然后选择“确定”。
在显示的“添加可移植类库”对话框中,选择
.NET Framework 4.6
和ASP.NET Core 1.0
选项。 (如果面向 .NET Framework,则可以选择任何相应选项。)如果面向 .NET Standard,请
AppLogger (Portable)
右键单击解决方案资源管理器中的“属性”,选择“库”选项卡,然后在“目标”部分中选择“目标 .NET 平台标准”。 此操作将提示进行确认,在确认后可以从下拉列表中选择.NET Standard 1.4
(或其他可用版本):单击“生成”选项卡,将“配置”更改为
Release
,然后选中“XML 文档文件”框。将代码添加到组件,例如:
namespace AppLogger { public class Logger { public void Log(string text) { Console.WriteLine(text); } } }
将配置设置为“发布”,生成项目,并检查
bin\Release
文件夹中生成了 DLL 和 XML 文件。
创建并更新 .nuspec 文件
打开命令提示符,导航到包含
AppLogger.csproj
文件夹的文件夹(.sln
文件的下一级),然后运行 NuGetspec
命令,创建初始AppLogger.nuspec
文件:nuget spec
在编辑器中打开
AppLogger.nuspec
,将其更新为与以下内容匹配,并将 YOUR_NAME 替换为适当的值。 具体而言,该值<id>
在 nuget.org (必须是唯一的,请参阅 创建包中所述的命名约定。 另请注意,还必须更新创建者和说明标记,否则在打包步骤中会出现错误。<?xml version="1.0"?> <package > <metadata> <id>AppLogger.YOUR_NAME</id> <version>1.0.0</version> <title>AppLogger</title> <authors>YOUR_NAME</authors> <owners>YOUR_NAME</owners> <requireLicenseAcceptance>false</requireLicenseAcceptance> <description>Awesome application logging utility</description> <releaseNotes>First release</releaseNotes> <copyright>Copyright 2018 (c) Contoso Corporation. All rights reserved.</copyright> <tags>logger logging logs</tags> </metadata> </package>
将引用程序集添加到
.nuspec
文件,也就是库的 DLL 和 IntelliSense XML 文件:如果面向 .NET Standard,则条目类似于以下内容:
<!-- Insert below <metadata> element --> <files> <file src="bin\Release\AppLogger.dll" target="lib\netstandard1.4\AppLogger.dll" /> <file src="bin\Release\AppLogger.xml" target="lib\netstandard1.4\AppLogger.xml" /> </files>
如果面向 .NET Framework ,则条目类似于以下内容:
<!-- Insert below <metadata> element --> <files> <file src="bin\Release\AppLogger.dll" target="lib\net46\AppLogger.dll" /> <file src="bin\Release\AppLogger.xml" target="lib\net46\AppLogger.xml" /> </files>
右键单击解决方案,选择“生成解决方案”,生成包的所有文件。
声明依赖项
如果具有其他 NuGet 包的任何依赖项,请使用 <group>
元素在清单的 <dependencies>
元素中列出这些依赖项。 例如,若要在 NewtonSoft.Json 8.0.3 或更高版本上声明依赖项,请添加以下内容:
<!-- Insert within the <metadata> element -->
<dependencies>
<group targetFramework="uap">
<dependency id="Newtonsoft.Json" version="8.0.3" />
</group>
</dependencies>
此处 version 特性的语法指示可接受版本 8.0.3 或更高版本。 若要指定不同的版本范围,请参阅包版本控制。
添加自述文件
创建 readme.txt
文件,将其放在项目根文件夹中,然后在 .nuspec
文件中引用:
<?xml version="1.0"?>
<package >
<metadata>...
</metadata>
<files>
<file src="readme.txt" target="" />
</files>
</package>
将包安装到项目中时,Visual Studio 显示 readme.txt
。 当安装到 .NET Core 项目中或其作为依赖项安装的包时,不会显示该文件。
打包组件
如果已完成的 .nuspec
引用需要包含在包中的所有文件,便可运行 pack
命令:
nuget pack AppLogger.nuspec
这将生成 AppLogger.YOUR_NAME.1.0.0.nupkg
。 在类似 NuGet 包资源管理器的工具中打开此文件并展开所有节点,即可看到以下内容(显示为 .NET Standard):
提示
.nupkg
文件实际上是具有其他扩展名的 ZIP 文件。 然后,也可通过将 .nupkg
更改为 .zip
来检查包内容,但将包上传到 nuget.org 之前,请记得恢复扩展名。
若要使包可供其他开发人员使用,请按照发布 包的说明进行操作。
请注意,pack
要求在 Mac OS X 上使用 Mono 4.4.2,但不能在 Linux 系统上使用。 在 Mac 上,还必须将 .nuspec
文件中的 Windows 路径名转换为 Unix 样式的路径。