{"meta":{"title":"Trabajar con el registro de NuGet","intro":"Puede configurar la dotnet interfaz de línea de comandos (CLI) para publicar paquetes NuGet en GitHub Packages y usar paquetes almacenados en GitHub Packages como dependencias en un proyecto de .NET.","product":"GitHub Packages","breadcrumbs":[{"href":"/es/packages","title":"GitHub Packages"},{"href":"/es/packages/working-with-a-github-packages-registry","title":"Trabajar con un registro de Paquetes de GitHub"},{"href":"/es/packages/working-with-a-github-packages-registry/working-with-the-nuget-registry","title":"Registro de NuGet"}],"documentType":"article"},"body":"# Trabajar con el registro de NuGet\n\nPuede configurar la dotnet interfaz de línea de comandos (CLI) para publicar paquetes NuGet en GitHub Packages y usar paquetes almacenados en GitHub Packages como dependencias en un proyecto de .NET.\n\n<!-- 2148AF7B-5FF8-4B28-A808-D692FEE2225A -->\n\n## Autenticación en GitHub Packages\n\n> \\[!NOTE]\n> GitHub Packages solo admite la autenticación usando un personal access token (classic). Para más información, consulta [Administración de tokens de acceso personal](/es/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens).\n\nNecesitas un token de acceso para publicar, instalar y eliminar paquetes privados, internos y públicos.\n\nPuedes utilizar un personal access token (classic) para autenticarte en el GitHub Packages o en la API de GitHub. Cuando creas un personal access token (classic), puedes asignar al token diferentes ámbitos en función de tus necesidades. Para más información sobre los ámbitos relacionados con paquetes para un personal access token (classic), consulta [Acerca de los permisos para los Paquetes de GitHub](/es/packages/learn-github-packages/about-permissions-for-github-packages#about-scopes-and-permissions-for-package-registries).\n\nPara autenticarte en un registro del GitHub Packages dentro de un flujo de trabajo de GitHub Actions, puedes utilizar:\n\n* `GITHUB_TOKEN` para publicar los paquetes asociados con el repositorio del flujo de trabajo.\n* Un personal access token (classic) con al menos alcance `read:packages` para instalar los paquetes asociados con otros repositorios privados (`GITHUB_TOKEN` puede utilizarse si el repositorio tiene acceso de lectura al paquete. Consulta [Configurar la visibilidad y el control de accesos de un paquete](/es/packages/learn-github-packages/configuring-a-packages-access-control-and-visibility)).\n\n### Autenticación en un GitHub Actions flujo de trabajo\n\nEste registro admite permisos granulares.\nEn los registros que admiten permisos granulares, si tu flujo de trabajo GitHub Actions usa un personal access token para autenticarse en un registro, te recomendamos encarecidamente que actualices tu flujo de trabajo para usar `GITHUB_TOKEN`. Para obtener instrucciones sobre cómo actualizar los flujos de trabajo que se autentican en un registro con personal access token, consulte [Publicar e instalar un paquete con Acciones de GitHub](/es/packages/managing-github-packages-using-github-actions-workflows/publishing-and-installing-a-package-with-github-actions#upgrading-a-workflow-that-accesses-a-registry-using-a-personal-access-token).\n\n> \\[!NOTE]\n> La capacidad de que los flujos de trabajo de GitHub Actions eliminen y restauren paquetes mediante la API de REST se encuentra actualmente en versión preliminar pública y está sujeta a cambios.\n\nPuede usar un `GITHUB_TOKEN` en un flujo de trabajo de GitHub Actions para eliminar o restaurar un paquete mediante la API de REST, si el token tiene permiso de `admin` para el paquete. A los repositorios que publican paquetes mediante un flujo de trabajo y a los repositorios que se han conectado explícitamente a los paquetes se les concede automáticamente el permiso `admin` para los paquetes del repositorio.\n\nPara obtener más información sobre `GITHUB_TOKEN`, consulta [Uso de GITHUB\\_TOKEN para la autenticación en flujos de trabajo](/es/actions/tutorials/authenticate-with-github_token#using-the-github_token-in-a-workflow). Para obtener más información sobre los procedimientos recomendados al usar un registro en acciones, consulta [Ejecutores en peligro](/es/actions/concepts/security/compromised-runners#cross-repository-access).\n\nUse el siguiente comando para autenticarse en GitHub Packages en un flujo de trabajo de GitHub Actions usando `GITHUB_TOKEN` en lugar de codificar de forma rígida un elemento personal access token en un archivo nuget.config del repositorio:\n\n```shell\ndotnet nuget add source --username USERNAME --password ${{ secrets.GITHUB_TOKEN }} --store-password-in-clear-text --name github \"https://nuget.pkg.github.com/NAMESPACE/index.json\"\n```\n\nReemplace por `NAMESPACE` el nombre de la cuenta personal u organización a la que se los paquetes.\n\nReemplace `USERNAME` con el nombre de usuario que se usará al conectarse a un origen autenticado.\n\nTambién puede optar por conceder permisos de acceso a los paquetes de forma independiente paraGitHub Codespaces yGitHub Actions . Para más información, consulta [Configurar la visibilidad y el control de accesos de un paquete](/es/packages/learn-github-packages/configuring-a-packages-access-control-and-visibility#ensuring-github-codespaces-access-to-your-package) y [Configurar la visibilidad y el control de accesos de un paquete](/es/packages/learn-github-packages/configuring-a-packages-access-control-and-visibility#ensuring-workflow-access-to-your-package).\n\n### Autenticación con personal access token\n\n> \\[!NOTE]\n> GitHub Packages solo admite la autenticación usando un personal access token (classic). Para más información, consulta [Administración de tokens de acceso personal](/es/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens).\n\nNecesitas un token de acceso para publicar, instalar y eliminar paquetes privados, internos y públicos.\n\nPuedes utilizar un personal access token (classic) para autenticarte en el GitHub Packages o en la API de GitHub. Cuando creas un personal access token (classic), puedes asignar al token diferentes ámbitos en función de tus necesidades. Para más información sobre los ámbitos relacionados con paquetes para un personal access token (classic), consulta [Acerca de los permisos para los Paquetes de GitHub](/es/packages/learn-github-packages/about-permissions-for-github-packages#about-scopes-and-permissions-for-package-registries).\n\nPara autenticarte en un registro del GitHub Packages dentro de un flujo de trabajo de GitHub Actions, puedes utilizar:\n\n* `GITHUB_TOKEN` para publicar los paquetes asociados con el repositorio del flujo de trabajo.\n* Un personal access token (classic) con al menos alcance `read:packages` para instalar los paquetes asociados con otros repositorios privados (`GITHUB_TOKEN` puede utilizarse si el repositorio tiene acceso de lectura al paquete. Consulta [Configurar la visibilidad y el control de accesos de un paquete](/es/packages/learn-github-packages/configuring-a-packages-access-control-and-visibility)).\n\nDebes utilizar un personal access token (classic) con los ámbitos adecuados para publicar e instalar paquetes en GitHub Packages. Para más información, consulta [Introducción a los paquetes de GitHub](/es/packages/learn-github-packages/introduction-to-github-packages#authenticating-to-github-packages).\n\nPara autenticarse en GitHub Packages mediante la `dotnet` interfaz de línea de comandos (CLI), cree un archivo *nuget.config* en el directorio del proyecto en el que se especifique GitHub Packages como una fuente en `packageSources` para el cliente `dotnet` CLI.\n\nDebes reemplazar:\n\n* `USERNAME` con el nombre de su cuenta personal en GitHub.\n* `TOKEN` con tu personal access token (classic).\n* `NAMESPACE` con el nombre de la cuenta personal u organización a la que pertenecen tus paquetes.\n\n```xml\n<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n    <packageSources>\n        <clear />\n        <add key=\"github\" value=\"https://nuget.pkg.github.com/NAMESPACE/index.json\" />\n    </packageSources>\n    <packageSourceCredentials>\n        <github>\n            <add key=\"Username\" value=\"USERNAME\" />\n            <add key=\"ClearTextPassword\" value=\"TOKEN\" />\n        </github>\n    </packageSourceCredentials>\n</configuration>\n```\n\n## Publicación de un paquete\n\n> \\[!NOTE]\n> El archivo `nupkg` para una versión del paquete NuGet debe tener un tamaño inferior a 2,147 GB.\n\nPuede publicar un paquete en GitHub Packages autenticándose con un archivo *nuget.config*, usando la opción de línea de comandos `--api-key` con su GitHubpersonal access token (classic), o mediante un comando que puede ejecutarse directamente desde la línea de comandos con la interfaz de línea de comandos (CLI) `dotnet`.\n\nSustituya `OWNER` por su nombre de usuario o el nombre de su empresa, y `YOUR_GITHUB_PAT` por su personal access token.\n\n```shell\ndotnet nuget add source --username OWNER --password YOUR_GITHUB_PAT --store-password-in-clear-text --name github \"https://nuget.pkg.github.com/OWNER/index.json\"\n```\n\nEl registro de NuGet almacena paquetes en tu cuenta personal o de la organización y te permite asociar los paquetes a un repositorio. Puedes elegir si quieres heredar permisos desde un repositorio o si quieres configurar permisos granulares independientemente de un repositorio.\n\nCuando publicas un paquete por primera vez, la visibilidad predeterminada es privada. Para cambiar la visibilidad o establecer permisos de acceso, consulta [Configurar la visibilidad y el control de accesos de un paquete](/es/packages/learn-github-packages/configuring-a-packages-access-control-and-visibility). Para obtener más información sobre cómo vincular un paquete publicado con un repositorio, consulte [Conectar un repositorio a un paquete](/es/packages/learn-github-packages/connecting-a-repository-to-a-package).\n\nSi especifica un `RepositoryURL` en el archivo *.csproj* del project, el paquete publicado se conectará automáticamente al repositorio especificado. Para obtener más información, vea [Trabajar con el registro de NuGet](/es/packages/working-with-a-github-packages-registry/working-with-the-nuget-registry#publishing-a-package-using-a-nugetconfig-file). Para obtener información sobre cómo vincular un paquete ya publicado a un repositorio, consulte [Conectar un repositorio a un paquete](/es/packages/learn-github-packages/connecting-a-repository-to-a-package).\n\n### Publicar un paquete usando GitHub personal access token como tu clave de API\n\nSi aún no dispones de un personal access token para utilizarlo con tu cuenta en GitHub, consulta [Administración de tokens de acceso personal](/es/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens).\n\n1. Cree un nuevo proyecto. Reemplace `PROJECT_NAME` por el nombre que desea asignar al project.\n\n   ```shell\n   dotnet new console --name PROJECT_NAME\n   ```\n\n2. Empaqueta el proyecto.\n\n   ```shell\n   dotnet pack --configuration Release\n   ```\n\n3. Publique el paquete mediante personal access token como clave de API. Reemplace `PROJECT_NAME` por el nombre del proyecto, `1.0.0` por el número de versión del paquete y `YOUR_GITHUB_PAT` por personal access token.\n\n   ```shell\n   dotnet nuget push \"bin/Release/PROJECT_NAME.1.0.0.nupkg\" --api-key YOUR_GITHUB_PAT --source \"github\"\n   ```\n\nDespués de que publiques un paquete, puedes verlo en GitHub. Para más información, consulta [Visualizar paquetes](/es/packages/learn-github-packages/viewing-packages).\n\n### Publicación de un paquete mediante un archivo *nuget.config*\n\nAl publicar, si vinculas tu paquete a un repositorio, el `OWNER` del repositorio especificado en tu archivo *.csproj* debe coincidir con el `NAMESPACE` que utilizas en tu archivo de autenticación *nuget.config*. Especifique o incremente el número de versión en el archivo *.csproj* y, a continuación, use el comando `dotnet pack` para crear un archivo *.nuspec* para esa versión. Para obtener más información sobre cómo crear el paquete, consulta [Creación y publicación de un paquete](https://docs.microsoft.com/nuget/quickstart/create-and-publish-a-package-using-the-dotnet-cli) en la documentación de Microsoft.\n\n> \\[!NOTE]\n> Si publicas un paquete vinculado a un repositorio, el paquete hereda automáticamente los permisos de acceso del repositorio vinculado y los flujos de trabajo de GitHub Actions en el repositorio vinculado automáticamente obtienen acceso al paquete, a menos que la organización haya deshabilitado la herencia automática de los permisos de acceso. Para más información, consulta [Configurar la visibilidad y el control de accesos de un paquete](/es/packages/learn-github-packages/configuring-a-packages-access-control-and-visibility#about-inheritance-of-access-permissions).\n\n1. Autentícate en GitHub Packages. Para obtener más información, consulta [Autenticación en GitHub Packages](#authenticating-to-github-packages).\n\n2. Cree un nuevo proyecto. Reemplace `PROJECT_NAME` por el nombre que desea asignar al project.\n\n   ```shell\n   dotnet new console --name PROJECT_NAME\n   ```\n\n3. Agregue la información específica de su proyecto al archivo del proyecto, que termina en *.csproj*. Asegúrese de reemplazar:\n\n   * `1.0.0` con el número de versión del paquete.\n   * `OWNER`con el nombre de la cuenta personal o la organización que posee el repositorio al que desea vincular el paquete para publicar el paquete.\n   * `REPOSITORY` con el nombre del repositorio al que desea conectar el paquete.\n\n   ```xml\n   <Project Sdk=\"Microsoft.NET.Sdk\">\n\n     <PropertyGroup>\n       <OutputType>Exe</OutputType>\n       <TargetFramework>netcoreapp3.0</TargetFramework>\n       <PackageId>PROJECT_NAME</PackageId>\n       <Version>1.0.0</Version>\n       <Authors>AUTHORS</Authors>\n       <Company>COMPANY_NAME</Company>\n       <PackageDescription>PACKAGE_DESCRIPTION</PackageDescription>\n       <RepositoryUrl>https://github.com/OWNER/REPOSITORY</RepositoryUrl>\n     </PropertyGroup>\n\n   </Project>\n   ```\n\n4. Empaqueta el proyecto.\n\n   ```shell\n   dotnet pack --configuration Release\n   ```\n\n5. Publique el paquete con el `key` que especificó en el archivo *nuget.config*. Reemplace `PROJECT_NAME` por el nombre del project y reemplace `1.0.0` por el número de versión del paquete.\n\n   ```shell\n   dotnet nuget push \"bin/Release/PROJECT_NAME.1.0.0.nupkg\" --source \"github\"\n   ```\n\nDespués de que publiques un paquete, puedes verlo en GitHub. Para más información, consulta [Visualizar paquetes](/es/packages/learn-github-packages/viewing-packages).\n\n## Publicar múltiples paquetes en el mismo repositorio\n\nPara conectar varios paquetes al mismo repositorio, use la misma GitHub dirección URL del repositorio en los `RepositoryURL` campos de todos los archivos *de proyecto .csproj* .\nGitHub compara el repositorio basándose en ese campo.\n\nEn el ejemplo siguiente se publican los proyectos MY\\_APP y MY\\_OTHER\\_APP en el mismo repositorio:\n\n```xml\n<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>netcoreapp3.0</TargetFramework>\n    <PackageId>MY_APP</PackageId>\n    <Version>1.0.0</Version>\n    <Authors>Octocat</Authors>\n    <Company>GitHub</Company>\n    <PackageDescription>This package adds a singing Octocat!</PackageDescription>\n    <RepositoryUrl>https://github.com/my-org/my-repo</RepositoryUrl>\n  </PropertyGroup>\n\n</Project>\n```\n\n```xml\n<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>netcoreapp3.0</TargetFramework>\n    <PackageId>MY_OTHER_APP</PackageId>\n    <Version>1.0.0</Version>\n    <Authors>Octocat</Authors>\n    <Company>GitHub</Company>\n    <PackageDescription>This package adds a dancing Octocat!</PackageDescription>\n    <RepositoryUrl>https://github.com/my-org/my-repo</RepositoryUrl>\n  </PropertyGroup>\n\n</Project>\n```\n\n## Instalación de un paquete\n\nEl uso de paquetes de GitHub en el proyecto es similar al uso de paquetes de *nuget.org*. Agregue las dependencias del paquete al archivo *.csproj* y especifique el nombre y la versión del paquete. Para obtener más información sobre el uso de un archivo *.csproj* en la project, consulte [Working with NuGet packages](https://docs.microsoft.com/nuget/consume-packages/overview-and-workflow) en la documentación de Microsoft.\n\n1. Autentícate en GitHub Packages. Para obtener más información, consulta [Autenticación en GitHub Packages](#authenticating-to-github-packages).\n\n2. Para usar un paquete, agregue `ItemGroup` y configure el campo `PackageReference` en el archivo *.csproj*. Reemplace el valor `PACKAGE_NAME` de `Include=\"PACKAGE_NAME\"` por la dependencia de su paquete, y sustituya el valor `X.X.X` de `Version=\"X.X.X\"` por la versión del paquete que desea utilizar:\n\n   ```xml\n   <Project Sdk=\"Microsoft.NET.Sdk\">\n\n     <PropertyGroup>\n       <OutputType>Exe</OutputType>\n       <TargetFramework>netcoreapp3.0</TargetFramework>\n       <PackageId>My-app</PackageId>\n       <Version>1.0.0</Version>\n      <Authors>Octocat</Authors>\n       <Company>GitHub</Company>\n      <PackageDescription>This package adds an Octocat!</PackageDescription>\n       <RepositoryUrl>https://github.com/OWNER/REPOSITORY</RepositoryUrl>\n     </PropertyGroup>\n\n     <ItemGroup>\n       <PackageReference Include=\"PACKAGE_NAME\" Version=\"X.X.X\" />\n     </ItemGroup>\n\n   </Project>\n   ```\n\n3. Instale los paquetes con el comando `restore`.\n\n   ```shell\n   dotnet restore\n   ```\n\n## Solución de problemas\n\nSi utiliza un `GITHUB_TOKEN` para autenticarse en un registro de GitHub Packages dentro de un flujo de trabajo de GitHub Actions, el token no puede acceder a paquetes privados basados en repositorios de otro repositorio distinto de aquel en el que se ejecuta el flujo de trabajo. Para acceder a los paquetes asociados a otros repositorios, genere un personal access token (classic) con el ámbito `read:packages` y páselo como secreto.\n\n### Errores intermitentes 403 al restaurar paquetes públicos\n\nSi usa GitHub Packages junto con *nuget.org* y experimenta errores intermitentes de 403 Prohibido al restaurar paquetes públicos estándar (como `Microsoft.Extensions.*`), esto puede ocurrir porque NuGet consulta todos los orígenes de paquetes configurados para cada paquete. Si GitHub Packages se produce un error de autenticación temporalmente, puede bloquear toda la restauración, incluso para los paquetes que no existen en GitHub Packages.\n\nPara evitar esto, use la [asignación de origen del paquete NuGet](https://learn.microsoft.com/nuget/consume-packages/package-source-mapping) para enrutar paquetes a orígenes específicos.\n\nReemplazar:\n\n* `NAMESPACE` con el nombre de la cuenta personal o la organización que es propietaria de tu GitHub Packages feed de NuGet.\n* `PACKAGE-ID-PREFIX` con el prefijo de identificador de paquete de NuGet que se usa para los paquetes alojados en GitHub Packages. Si usa varios prefijos, agregue entradas adicionales `<package>` para cada prefijo.\n\n```xml\n<configuration>\n    <packageSources>\n        <add key=\"nuget.org\" value=\"https://api.nuget.org/v3/index.json\" />\n        <add key=\"github\" value=\"https://nuget.pkg.github.com/NAMESPACE/index.json\" />\n    </packageSources>\n    <packageSourceMapping>\n        <packageSource key=\"nuget.org\">\n            <package pattern=\"*\" />\n        </packageSource>\n        <packageSource key=\"github\">\n            <package pattern=\"PACKAGE-ID-PREFIX.*\" />\n        </packageSource>\n    </packageSourceMapping>\n</configuration>\n```\n\nNuGet usa el [patrón de coincidencia más específico](https://learn.microsoft.com/nuget/consume-packages/package-source-mapping#package-pattern-precedence), por lo que los paquetes coincidentes `PACKAGE-ID-PREFIX.*` solo se capturan de GitHub Packages, mientras que todos los demás paquetes se capturan de *nuget.org*. Esto también ayuda a evitar ataques de confusión de dependencias asegurándose de que los paquetes privados solo pueden provenir de la GitHub Packages fuente.\n\n## Información adicional\n\n* [Borrar y restablecer un paquete](/es/packages/learn-github-packages/deleting-and-restoring-a-package)"}