디버깅 환경은 컴파일된 코드와 소스 코드 간의 연결, 지역 변수 이름, 스택 추적 등과 같은 중요한 정보를 제공하므로 디버그 기호의 존재에 의존합니다. 기호 패키지(.snupkg)를 사용하여 이러한 기호를 배포하고 NuGet 패키지의 디버깅 환경을 개선할 수 있습니다.
라이브러리 소비자가 디버그 기호를 사용할 수 있도록 하는 유일한 전략은 기호 패키지가 아닙니다. 다음 프로젝트 속성에서
dll또는exe다음 프로젝트 속성을 사용할 수도embed있습니다.<DebugType>embedded</DebugType>
필수 조건
필요한 NuGet 프로토콜을 구현하는 v4.9.0 이상 또는 dotnet CLI v2.2.0 이상을nuget.exe.
기호 패키지 만들기
dotnet CLI 또는 MSBuild를 사용하는 경우 .nupkg 파일 외에도 .snupkg 파일을 만들도록 속성과 SymbolPackageFormat 속성을 설정 IncludeSymbols 해야 합니다.
.csproj 파일에 다음 속성을 추가합니다.
<PropertyGroup> <IncludeSymbols>true</IncludeSymbols> <SymbolPackageFormat>snupkg</SymbolPackageFormat> </PropertyGroup>또는 명령줄에서 다음 속성을 지정합니다.
dotnet pack MyPackage.csproj -p:IncludeSymbols=true -p:SymbolPackageFormat=snupkg또는
msbuild MyPackage.csproj /t:pack /p:IncludeSymbols=true /p:SymbolPackageFormat=snupkg
NuGet.exe사용하는 경우 다음 명령을 사용하여 .nupkg 파일 외에도 .snupkg 파일을 만들 수 있습니다.
nuget pack MyPackage.nuspec -Symbols -SymbolPackageFormat snupkg
nuget pack MyPackage.csproj -Symbols -SymbolPackageFormat snupkg
속성에는 SymbolPackageFormat 두 값 symbols.nupkg 중 하나(기본값) 또는 snupkg. 이 속성을 지정하지 않으면 레거시 기호 패키지가 만들어집니다.
메모
레거시 형식 .symbols.nupkg 은 여전히 지원되지만 네이티브 패키지와 같은 호환성 이유로만 지원 됩니다(레거시 기호 패키지 참조). NuGet.org의 기호 서버는 새 기호 패키지 형식 .snupkg만 허용합니다.
기호 패키지 게시
메모
Azure Devops 아티팩트는 현재 .snupkg 파일을 통한 디버깅을 지원하지 않습니다.
편의를 위해 먼저 NuGet을 사용하여 API 키를 저장합니다( 패키지 게시 참조).
nuget SetApiKey Your-API-KeyTip
NuGet 7.6
NUGET_API_KEYNUGET_SYMBOL_API_KEYSetApiKey부터는 . 자세한 내용은 환경 변수를 참조하세요.기본 패키지를 nuget.org 게시한 후 다음과 같이 기호 패키지를 푸시합니다.
nuget push MyPackage.snupkg아래 명령을 사용하여 기본 패키지와 기호 패키지를 동시에 푸시할 수도 있습니다. .nupkg 및 .snupkg 파일은 모두 현재 폴더에 있어야 합니다.
nuget push MyPackage.nupkg
NuGet은 두 패키지를 모두 nuget.org 게시합니다. MyPackage.nupkg 는 먼저 게시되고 그 다음에 게시 MyPackage.snupkg됩니다.
메모
기호 패키지가 게시되지 않은 경우 NuGet.org 원본을 .로 https://api.nuget.org/v3/index.json구성했는지 확인합니다. 기호 패키지 게시는 NuGet V3 API에서만 지원됩니다.
NuGet.org 기호 서버
NuGet.org 자체 기호 서버 리포지토리를 지원하고 새 기호 패키지 형식 .snupkg만 허용합니다. 패키지 소비자는 Visual Studio 기호 원본에 https://symbols.nuget.org/download/symbols 추가하여 nuget.org 기호 서버에 게시된 기호를 사용할 수 있으며, 이를 통해 Visual Studio 디버거에서 패키지 코드를 한 단계씩 실행할 수 있습니다. 해당 프로세스에 대한 자세한 내용은 Visual Studio 디버거의 기호(.pdb) 및 소스 파일 지정을 참조하세요.
NuGet.org 기호 패키지 제약 조건
NuGet.org 기호 패키지에 대해 다음과 같은 제약 조건이 있습니다.
- 기호 패키지에는 다음 파일 확장자만 허용됩니다.
.pdb,.nuspec, ,.psmdcp.rels.xml.p7s - NuGet.org의 기호 서버에서는 관리형 이식 가능한 PDB 만 지원됩니다.
- PDB 및 관련 .nupkg DLL은 Visual Studio 버전 15.9 이상에서 컴파일러를 사용하여 빌드해야 합니다(PDB 암호화 해시 참조).
NuGet.org 게시된 기호 패키지는 이러한 제약 조건이 충족되지 않으면 유효성 검사에 실패합니다.
메모
C++ 프로젝트와 같은 네이티브 프로젝트는 이식 가능한 PDB 대신 Windows PDB를 생성합니다. 이러한 기능은 NuGet.org의 기호 서버에서 지원되지 않습니다. 대신 레거시 기호 패키지를 사용하세요.
기호 패키지 유효성 검사 및 인덱싱
NuGet.org 게시된 기호 패키지는 맬웨어 검사를 포함하여 여러 유효성 검사를 거칩니다. 패키지가 유효성 검사에 실패하면 패키지 세부 정보 페이지에 오류 메시지가 표시됩니다. 또한 패키지 소유자는 식별된 문제를 해결하는 방법에 대한 지침이 포함된 이메일을 받게 됩니다.
기호 패키지가 모든 유효성 검사를 통과하면 기호는 NuGet.org의 기호 서버에서 인덱싱되며 사용할 수 있습니다.
패키지 유효성 검사 및 인덱싱은 일반적으로 15분 미만이 걸립니다. 패키지 게시가 예상보다 오래 걸리는 경우 status.nuget.org 방문하여 NuGet.org 중단이 발생하는지 확인합니다. 모든 시스템이 작동하고 패키지가 1시간 이내에 성공적으로 게시되지 않은 경우 nuget.org 로그인하고 패키지 세부 정보 페이지의 고객 지원 링크를 사용하여 문의하세요.
기호 패키지 구조
기호 패키지(.snupkg)에는 다음과 같은 특성이 있습니다.
.snupkg는 해당 NuGet 패키지(.nupkg)와 ID 및 버전이 동일합니다.
.snupkg는 DLL/EXE 대신 해당 PDB가 동일한 폴더 계층 구조에 포함된다는 점을 구분하여 모든 DLL 또는 EXE 파일에 대해 해당 .nupkg와 동일한 폴더 구조를 가집니다. PDB 이외의 확장이 있는 파일 및 폴더는 snupkg에서 제외됩니다.
기호 패키지의 .nuspec 파일에는 패키지 형식이
SymbolsPackage있습니다.<packageTypes> <packageType name="SymbolsPackage"/> </packageTypes>작성자가 사용자 지정 nuspec을 사용하여 nupkg 및 snupkg를 빌드하기로 결정한 경우 snupkg에는 동일한 폴더 계층 구조와 2에 자세히 설명된 파일이 있어야 합니다.
다음 필드는 snupkg의 nuspec
authorsiconownersrequireLicenseAcceptancelicense typelicenseUrl에서 제외됩니다.요소를 사용하지
<license>마세요. .snupkg는 해당 .nupkg와 동일한 라이선스로 적용됩니다.
참고하십시오
소스 링크를 사용하여 .NET 어셈블리의 소스 코드 디버깅을 사용하도록 설정하는 것이 좋습니다. 자세한 내용은 원본 링크 지침을 참조하세요.
기호 패키지에 대한 자세한 내용은 NuGet 패키지 디버깅 및 기호 개선 디자인 사양을 참조하세요.