> For the complete documentation index, see [llms.txt](https://docs.skail.dev/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.skail.dev/construir/sdk-.net/pacotes.md).

# Pacotes

Os pacotes NuGet do SDK .NET do skail: o que cada um contém, qual é obrigatório e como referenciá-los no `.csproj`.

## Os pacotes

| Pacote                            | Versão                    | Obrigatório             | O que contém                                                                                                                                                                                                                              |
| --------------------------------- | ------------------------- | ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `Skail.Platform.Runtime`          | `2.2.*`                   | Sim, na aplicação       | O runtime: busca de trabalho no skail, replay, memoização, `UseSkail()` e `AddSkail()`. Traz `Standard` e `Build` por dependência. É o único pacote que você referencia explicitamente em uma aplicação.                                  |
| `Skail.Platform.Runtime.Standard` | via dependência           | Sim, vem com o Runtime  | Os atributos `[SkailFunction]` e `[SkailCommand]`, o atributo de assembly `[assembly: VisibleToSkailPlatform]` e os tipos do modelo de programação.                                                                                       |
| `Skail.Platform.Runtime.Build`    | via dependência           | Sim, vem com o Runtime  | O passo de build que instrumenta o código (IL weaving) para o runtime interceptar cada `await` de uma `SkailTask`. Adiciona o target MSBuild `SkailBuild` à compilação. Sem ele o código compila, mas o runtime não reconhece os métodos. |
| `Skail.Platform.Analyzer`         | última disponível no feed | Recomendado             | Analyzer Roslyn com as regras SKAIL001, SKAIL002 e SKAIL003, que apontam assinaturas inválidas em tempo de compilação. Se as regras não aparecerem no build, referencie o pacote diretamente.                                             |
| `Skail.Platform.Runtime.Testing`  | `2.2.*`                   | Só em projetos de teste | `UnitTestSkailPlatform`, `UnitTestMessageBroker`, `EventFrameHelper` e `FaultInjection` para testar functions e commands sem conectar ao skail, com xunit.                                                                                |

O SDK exige .NET 8 ou superior.

## Referência no `.csproj`

Aplicação (Worker Service):

```xml
<Project Sdk="Microsoft.NET.Sdk.Worker">

  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <Nullable>enable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Skail.Platform.Runtime" Version="2.2.*" />
  </ItemGroup>

</Project>
```

Projeto de testes (além de xunit e do runner que você já usa):

```xml
<ItemGroup>
  <PackageReference Include="Skail.Platform.Runtime.Testing" Version="2.2.*" />
</ItemGroup>
```

O template oficial (`dotnet new skail`, em [github.com/skaildev](https://github.com/skaildev/.github/tree/main/Templates/DotNet)) já vem com essas referências.

## Acesso ao feed

O feed dos pacotes é privado e o acesso é fornecido pelo skail. Com o endereço da fonte e a credencial em mãos, registre a fonte em um `nuget.config` na raiz da solução, sem versionar credenciais:

```xml
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="skail" value="https://SEU_FEED_SKAIL/index.json" />
  </packageSources>
</configuration>
```

## O que acontece no build

`Skail.Platform.Runtime.Build` executa o target `SkailBuild` depois da compilação e reescreve o IL dos métodos que retornam `SkailTask`. É esse passo que permite ao runtime pausar a execução em um `await`, registrar o passo e retomar depois. Ele roda em `dotnet build`, `dotnet run` e `dotnet publish`; não exige configuração.

## Erros

| Sintoma                                            | Causa provável                                                                                                                                         | O que fazer                                                                                                                       |
| -------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------- |
| Pacote não encontrado no restore                   | Fonte do feed não registrada ou sem credencial                                                                                                         | Confira o `nuget.config` e o acesso ao feed.                                                                                      |
| `There is not Skail runtime available!` na subida  | O IL weaving não rodou (pacote `Build` ausente ou build cacheado), ou faltou `UseSkail()`/`AddSkail()`, ou faltou `[assembly: VisibleToSkailPlatform]` | Faça `dotnet clean` e `dotnet build`; confira a [Configuração do host](/construir/sdk-.net/configuracao-do-host.md).              |
| `StateMachine not registered.`                     | Método não descoberto: assembly sem `[assembly: VisibleToSkailPlatform]`, método não `async`, ou assinatura fora das regras                            | Confira as regras em [SkailFunction](/construir/sdk-.net/skailfunction.md) e [SkailCommand](/construir/sdk-.net/skailcommand.md). |
| Erros SKAIL001, SKAIL002 ou SKAIL003 na compilação | Assinatura inválida em um método decorado                                                                                                              | Ver [Regras do analyzer](/construir/sdk-.net/regras-do-analyzer-skail001-skail002-skail003.md).                                   |

## Veja também

[Configuração do host](/construir/sdk-.net/configuracao-do-host.md), [Como testar funções com Skail.Platform.Runtime.Testing](/construir/testar-depurar-e-observar/como-testar-funcoes-com-skail.platform.runtime.testing.md), [Quickstart C# .NET](/aprender/readme.md).
