Criando pacotes de símbolos herdados (.symbols.nupkg)

Importante

O novo formato recomendado para pacotes de símbolos é .snupkg. Veja Criando pacotes de símbolos (.snupkg).
.symbols.nupkg ainda é compatível, mas exclusivamente por razões de compatibilidade.

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

Criando um pacote de símbolos herdado

Para criar um pacote de símbolos 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 de símbolos herdado como {identifier}.symbols.nupkg e inclua sua DLL de assembly, arquivos .pdb, 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ímbolos herdado pode ser direcionado a várias estruturas de destino da mesma maneira que um pacote de biblioteca, portanto, a estrutura da pasta lib deve ser exatamente a mesma que o pacote primário, incluindo somente arquivos .pdb junto com a DLL.

Por exemplo, um pacote de símbolos herdado voltado para o .NET 4.0 e o Silverlight 4 teria este 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 destes 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 pasta lib, um pacote de símbolos 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ímbolos herdado pode ser compilado por convenções, de uma estrutura de pasta conforme descrito na seção anterior ou especificando o conteúdo na seção files 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