Criando pacotes de símbolo herdado (.symbols.nupkg)

Importante

O novo formato recomendado para pacotes de símbolos é .snupkg. Veja Criando pacotes de símbolos (.snupkg).
Ainda há suporte para .symbols.nupkg, mas apenas por motivos de compatibilidade.

Além de criar pacotes para nuget.org ou outras fontes, o NuGet também dá suporte à criação de pacotes de símbolos associados que podem ser publicados em servidores de símbolos.

Criando um pacote de símbolo herdado

Para criar um pacote de símbolo herdado, siga estas convenções:

  • Nomeie o pacote primário (com o seu código) {identifier}.nupkg e inclua todos os arquivos, exceto os arquivos .pdb.
  • Nomeie o pacote {identifier}.symbols.nupkg de símbolos herdado e inclua sua DLL de assembly, .pdb arquivos, arquivos XMLDOC, arquivos de origem (consulte as seções a seguir).

Você pode criar pacotes com a opção -Symbols de um arquivo .nuspec ou um arquivo de projeto:

nuget pack MyPackage.nuspec -Symbols

nuget pack MyProject.csproj -Symbols

Observe que pack requer o Mono 4.4.2 no Mac OS X e não funciona em sistemas Linux. Em um Mac, você também precisa converter os nomes de caminho do Windows no arquivo .nuspec em caminhos no estilo Unix.

Estrutura do pacote de símbolos herdado

Um pacote de símbolo herdado pode ter como destino várias estruturas de destino da mesma forma que um pacote de biblioteca, portanto, a estrutura da lib pasta deve ser exatamente a mesma que o pacote primário, incluindo .pdb apenas arquivos ao lado da DLL.

Por exemplo, um pacote de símbolo herdado direcionado ao .NET 4.0 e ao Silverlight 4 teria esse layout:

\lib
    \net40
        \MyAssembly.dll
        \MyAssembly.pdb
    \sl40
        \MyAssembly.dll
        \MyAssembly.pdb

Arquivos de origem são, então, colocados em uma pasta especial separada chamada src, que precisa seguir a estrutura relativa do repositório de origem. Isso ocorre porque PDBs contêm caminhos absolutos para arquivos de origem usados para compilar a DLL correspondente e eles precisam ser encontrados durante o processo de publicação. Um caminho base (prefixo de caminho comum) pode ser removido. Por exemplo, considere uma biblioteca criada a partir desses arquivos:

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)

Além da lib pasta, um pacote de símbolo herdado precisaria conter este layout:

\src
    \Common
        \MyClass.cs
    \Full
        \Properties
            \AssemblyInfo.cs
    \Silverlight
        \Properties
            \AssemblyInfo.cs
        \MySilverlightExtensions.cs

Fazendo referência a arquivos no nuspec

Um pacote de símbolo herdado pode ser criado por convenções, a partir de uma estrutura de pastas, conforme descrito na seção anterior, ou especificando seu conteúdo na files seção do manifesto. Por exemplo, para compilar o pacote mostrado na seção anterior, use o seguinte no arquivo .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>

Confira também