| title | 创建旧式符号包 (.symbols.nupkg) |
|---|---|
| description | 如何在 Visual Studio 中创建仅包含符号的 NuGet 包以支持调试其他 NuGet 包。 |
| author | karann-msft |
| ms.author | karann |
| ms.date | 09/12/2017 |
| ms.topic | conceptual |
| ms.reviewer | anangaur |
| ms.openlocfilehash | 374e9ccfc01cd06508e76529765db3f849342222 |
| ms.sourcegitcommit | 2b50c450cca521681a384aa466ab666679a40213 |
| ms.translationtype | HT |
| ms.contentlocale | zh-CN |
| ms.lasthandoff | 04/07/2020 |
| ms.locfileid | 77476264 |
Important
符号包的新推荐格式为 .snupkg。 请参阅创建符号包 (.snupkg)。
.symbols.nupkg 仍受支持,但仅出于兼容性原因。
除了为 nuget.org 或其他源生成包之外,NuGet 还支持创建可发布到符号服务器的关联符号包。 旧式符号包格式 .symbols.nupkg 可以推送到 SymbolSource 存储库。
然后,包使用者可将 https://nuget.smbsrc.net 添加到 Visual Studio 中的符号源,它允许在 Visual Studio 调试程序中单步执行包代码。 有关该过程的详细信息,请参阅在 Visual Studio 调试程序中指定符号 (.pdb) 和源文件。
若要创建旧式符号包,请按照以下约定操作:
- (使用代码)将主包命名为
{identifier}.nupkg,并包括除.pdb文件之外的所有文件。 - 将旧式符号包命名为
{identifier}.symbols.nupkg,并包括程序集 DLL、.pdb文件、XMLDOC 文件和源文件(请参阅以下各节)。
可使用 -Symbols 选项从 .nuspec 文件或项目文件中同时创建这两个包:
nuget pack MyPackage.nuspec -Symbols
nuget pack MyProject.csproj -Symbols
请注意,pack 要求在 Mac OS X 上使用 Mono 4.4.2,但不能在 Linux 系统上使用。 在 Mac 上,还必须将 .nuspec 文件中的 Windows 路径名转换为 Unix 样式的路径。
旧式符号包面向多个目标框架的方式可与库包的方式相同,因此 lib 文件夹的结构应与主包的结构完全相同,即仅包括 .pdb 和 DLL 文件。
例如,面向 .NET 4.0 和 Silverlight 4 的旧式符号包具有以下布局:
\lib
\net40
\MyAssembly.dll
\MyAssembly.pdb
\sl40
\MyAssembly.dll
\MyAssembly.pdb
然后,在名为 src 的单独的特殊文件夹中放入源文件,该文件夹必须遵循源存储库的相对结构。 这是因为 PDB 包含指向用于编译匹配 DLL 的源文件的绝对路径,在发布过程中需要找到这些路径。 可以去除基路径(通用路径前缀)。例如,假设从以下文件中生成一个库:
C:\Projects
\MyProject
\Common
\MyClass.cs
\Full
\Properties
\AssemblyInfo.cs
\MyAssembly.csproj (producing \lib\net40\MyAssembly.dll)
\Silverlight
\Properties
\AssemblyInfo.cs
\MySilverlightExtensions.cs
\MyAssembly.csproj (producing \lib\sl4\MyAssembly.dll)
除了 lib 文件夹之外,旧式符号包需要包含以下布局:
\src
\Common
\MyClass.cs
\Full
\Properties
\AssemblyInfo.cs
\Silverlight
\Properties
\AssemblyInfo.cs
\MySilverlightExtensions.cs
可以通过约定从文件夹结构中生成旧式符号包(如上一部分所述),也可以通过在清单的 files 部分中指定内容进行生成。 例如,若要生成上一部分中显示的包,请使用 .nuspec 文件中的以下内容:
<files>
<file src="Full\bin\Debug\*.dll" target="lib\net40" />
<file src="Full\bin\Debug\*.pdb" target="lib\net40" />
<file src="Silverlight\bin\Debug\*.dll" target="lib\sl40" />
<file src="Silverlight\bin\Debug\*.pdb" target="lib\sl40" />
<file src="**\*.cs" target="src" />
</files>Important
若要将包推送到 nuget.org,必须使用实现所需 NuGet 协议的 nuget.exe v4.9.1 或更高版本。
-
为方便起见,请首先保存 NuGet 的 API 密钥(请参阅发布包),它将应用于 nuget.org 和 symbolsource.org,因为 symbolsource.org 会与 nuget.org 进行核对以验证包所有者。
nuget SetApiKey Your-API-Key -
将主包发布到 nuget.org 后,按照以下方式推送旧式符号包,由于文件名中的
.symbols,此步骤将 symbolsource.org 自动用作目标:nuget push MyPackage.symbols.nupkg -
若要发布到另一符号存储库或推送不遵循命名约定的旧式符号包,请使用
-Source选项:nuget push MyPackage.symbols.nupkg -source https://nuget.smbsrc.net/ -
还可以使用以下项将主包和符号包同时推送到两个存储库:
nuget push MyPackage.nupkg[!Note] 在 nuget.exe 4.5.0 或更高版本中,符号包不会自动推送到 symbolsource.org。需要单独推送符号包,如前面步骤所述。
在此情况下,向 nuget.org 发布主包后,NuGet 将 MyPackage.symbols.nupkg(如果存在)发布到 https://nuget.smbsrc.net/ (symbolsource.org 的推送 URL)。
- 创建符号包 (.snupkg) - 符号包的新推荐格式
- 移动到新的 SymbolSource 引擎 (symbolsource.org)