Nota
O acceso a esta páxina require autorización. Pode tentar iniciar sesión ou modificar os directorios.
O acceso a esta páxina require autorización. Pode tentar modificar os directorios.
En este artículo se describen las nuevas características del SDK de .NET y las herramientas para .NET 8.
SDK
Esta sección contiene los subtemas siguientes:
- Evaluación del proyecto basado en la CLI
- Salida de compilación del terminal
- Rutas de acceso de salida simplificadas
- Comando "dotnet workload clean"
- Recursos "dotnet publish" y "dotnet pack"
-
dotnet restoreauditoría de seguridad - Motor de plantillas
- Vínculo de origen
- SDK de compilación de origen
Evaluación del proyecto basado en la CLI
MSBuild incluye una nueva característica que facilita la incorporación de datos de MSBuild a los scripts o herramientas. Las siguientes marcas nuevas están disponibles para los comandos de la CLI, como dotnet publish , para obtener datos para su uso en canalizaciones de CI y en otros lugares.
| Flag | Description |
|---|---|
--getProperty:<PROPERTYNAME> |
Recupera la propiedad MSBuild con el nombre especificado. |
--getItem:<ITEMTYPE> |
Recupera elementos de MSBuild del tipo especificado. |
--getTargetResult:<TARGETNAME> |
Recupera los resultados de la ejecución del objetivo especificado. |
Los valores se escriben en la salida estándar. Los valores múltiples o complejos se generan como JSON, como se muestra en los ejemplos siguientes.
>dotnet publish --getProperty:OutputPath
bin\Release\net8.0\
>dotnet publish -p PublishProfile=DefaultContainer --getProperty:GeneratedContainerDigest --getProperty:GeneratedContainerConfiguration
{
"Properties": {
"GeneratedContainerDigest": "sha256:ef880a503bbabcb84bbb6a1aa9b41b36dc1ba08352e7cd91c0993646675174c4",
"GeneratedContainerConfiguration": "{\u0022config\u0022:{\u0022ExposedPorts\u0022:{\u00228080/tcp\u0022:{}},\u0022Labels\u0022...}}"
}
}
>dotnet publish -p PublishProfile=DefaultContainer --getItem:ContainerImageTags
{
"Items": {
"ContainerImageTags": [
{
"Identity": "latest",
...
]
}
}
Salida de terminal de compilación
dotnet build tiene una nueva opción para generar una salida de compilación más modernizada. Esta salida del Terminal Logger agrupa los errores junto al proyecto del que proceden, diferencia mejor los distintos marcos de trabajo de destino para los proyectos de múltiples destinos y proporciona información en tiempo real sobre lo que hace la compilación. Para activar la nueva salida, use la opción --tl. Para obtener más información sobre esta opción, consulte dotnet build options (Opciones de compilación de dotnet).
Rutas de acceso de salida simplificadas
.NET 8 presenta una opción para simplificar la ruta de acceso de salida y la estructura de carpetas para las salidas de compilación. Anteriormente, las aplicaciones .NET producían un conjunto profundo y complejo de rutas de acceso de salida para diferentes artefactos de compilación. La nueva estructura simplificada de la ruta de acceso de salida recopila todas las salidas de compilación en una ubicación común, lo que facilita que las herramientas lo prevean.
Para obtener más información, consulte Diseño de salida de artefactos.
Comando dotnet workload clean
.NET 8 introduce un nuevo comando para limpiar paquetes de carga de trabajo que podrían quedar tras varias actualizaciones del SDK de .NET o de Visual Studio. Si tiene problemas al administrar cargas de trabajo, considere la posibilidad de usar workload clean para restaurar de forma segura a un estado conocido antes de intentarlo de nuevo. El comando tiene dos modos:
dotnet workload cleanEjecuta la recolección de basura de carga de trabajo para cargas de trabajo basadas en archivos o MSI, que limpia los paquetes huérfanos. Los paquetes huérfanos proceden de versiones desinstaladas del SDK de .NET o paquetes en los que los registros de instalación del paquete ya no existen.
Si Se instala Visual Studio, el comando también muestra las cargas de trabajo que debe limpiar manualmente mediante Visual Studio.
dotnet workload clean --allEste modo es más agresivo y limpia todos los paquetes de la máquina que son del tipo de instalación de carga de trabajo del SDK actual (y eso no es de Visual Studio). También quita todos los registros de instalación de cargas de trabajo para la banda de características del SDK de .NET en ejecución y versiones inferiores.
dotnet publishactivos y dotnet pack
Dado que los dotnet publish comandos y dotnet pack están diseñados para generar recursos de producción, ahora generan Release recursos de forma predeterminada.
En la salida siguiente, se muestra el comportamiento diferente entre dotnet build y dotnet publish y cómo puede revertir a los recursos de publicación Debug estableciendo la propiedad PublishRelease a false.
/app# dotnet new console
/app# dotnet build
app -> /app/bin/Debug/net8.0/app.dll
/app# dotnet publish
app -> /app/bin/Release/net8.0/app.dll
app -> /app/bin/Release/net8.0/publish/
/app# dotnet publish -p:PublishRelease=false
app -> /app/bin/Debug/net8.0/app.dll
app -> /app/bin/Debug/net8.0/publish/
Para obtener más información, vea "dotnet pack" usa release config y "dotnet publish" usa release config.
dotnet restore auditoría de seguridad
A partir de .NET 8, puede optar por comprobar si hay vulnerabilidades conocidas cuando se restauran los paquetes de dependencia. Esta auditoría genera un informe de vulnerabilidades de seguridad con el nombre del paquete afectado, la gravedad de la vulnerabilidad y un vínculo a la advertencia para obtener más detalles. Al ejecutar dotnet add o dotnet restore, aparecerán advertencias NU1901-NU1904 para cualquier vulnerabilidad que se encuentre. Para obtener más información, consulte Auditoría de vulnerabilidades de seguridad.
Motor de plantillas
El motor de plantillas proporciona una experiencia más segura en .NET 8 mediante la integración de algunas de las características relacionadas con la seguridad de NuGet. Estas mejoras incluyen:
Impedir la descarga de paquetes de fuentes
http://de forma predeterminada. Por ejemplo, el siguiente comando no podrá instalar el paquete de plantilla porque la dirección URL de origen no usa HTTPS.dotnet new install console --add-source "http://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public/nuget/v3/index.json"Puede invalidar esta limitación mediante la
--forcemarca .Para
dotnet new,dotnet new installydotnet new update, compruebe si hay vulnerabilidades conocidas en el paquete de plantilla. Si se encuentran vulnerabilidades y desea continuar, debe usar la--forcemarca .Para
dotnet new, proporcione información sobre el propietario del paquete de plantilla. El portal de NuGet comprueba la propiedad y se puede considerar una característica de confianza.Para
dotnet searchydotnet uninstall, indique si una plantilla está instalada desde un paquete que es "de confianza", es decir, usa un prefijo reservado.
Vínculo de origen
Enlace de origen ahora se incluye en el SDK de .NET. El objetivo es que, al agrupar el vínculo de origen en el SDK, en lugar de requerir un elemento independiente <PackageReference> para el paquete, más paquetes incluirán esta información de forma predeterminada. Esa información mejorará la experiencia del IDE para los desarrolladores.
Nota:
Como efecto secundario de este cambio, la información de confirmación se incluye en el InformationalVersion valor de las bibliotecas y aplicaciones compiladas, incluso las que tienen como destino .NET 7 o una versión anterior. Para obtener más información, consulte Vínculo de origen incluido en el SDK de .NET.
SDK de construcción desde el código fuente
El SDK construido con distribución de Linux ahora tiene la capacidad de compilar aplicaciones independientes utilizando los paquetes de tiempo de ejecución de compilación de origen. El paquete de tiempo de ejecución específico de la distribución se incluye con el SDK de compilación desde el código fuente. Durante la implementación independiente, este paquete de tiempo de ejecución agrupado será referenciado, habilitando la función para los usuarios.
Plantilla de aplicación de consola nativa AOT
La plantilla predeterminada para aplicaciones de consola ahora incluye compatibilidad con AOT de forma inmediata. Para crear un proyecto configurado para la compilación de AOT, simplemente ejecute dotnet new console --aot. La configuración del proyecto agregada por --aot tiene tres efectos:
- Genera un ejecutable independiente nativo con AOT nativo al publicar el proyecto, por ejemplo, con
dotnet publisho Visual Studio. - Habilita los analizadores de compatibilidad para reducción, AOT y archivo único. Estos analizadores le avisan de las partes potencialmente problemáticas del proyecto (si hay alguna).
- Habilita la emulación en tiempo de depuración de AOT para que, al depurar el proyecto sin compilación de AOT, obtenga una experiencia similar a la de AOT. Por ejemplo, si usa System.Reflection.Emit en un paquete NuGet que no fue detectado por el analizador de compatibilidad por no haber sido anotado para AOT, la emulación significa que no se llevará ninguna sorpresa al intentar publicar el proyecto con AOT.
.NET en Linux
Líneas base de compatibilidad mínimas para Linux
Las líneas base de compatibilidad mínimas para Linux se han actualizado para .NET 8. .NET está diseñado para Ubuntu 16.04, compatible con todas las arquitecturas. Esto es principalmente importante para definir la versión mínima glibc para .NET 8. .NET 8 no se iniciará en versiones de distribución que incluyan un glibc anterior, como Ubuntu 14.04 o Red Hat Enterprise Linux 7.
Para obtener más información, consulte Compatibilidad con la familia Red Hat Enterprise Linux.
Crea tu propio .NET en Linux
En las versiones previas de .NET, podía compilar .NET desde el código fuente, pero requería crear un "tarball de origen" a partir del commit del repositorio dotnet/installer correspondiente a una versión publicada. En .NET 8, ya no es necesario y puede compilar .NET en Linux directamente desde el repositorio dotnet/dotnet . Ese repositorio usa dotnet/source-build para compilar entornos de ejecución, herramientas y SDK de .NET. Esta es la misma compilación que Red Hat y Canonical usan para compilar .NET.
La creación en un contenedor es el enfoque más sencillo para la mayoría de las personas, ya que las dotnet-buildtools/prereqs imágenes de contenedor contienen todas las dependencias necesarias. Para obtener más información, consulte las instrucciones de compilación.
Comprobación de firma de NuGet
A partir de .NET 8, NuGet comprueba los paquetes firmados en Linux de forma predeterminada. NuGet también comprueba los paquetes firmados en Windows.
La mayoría de los usuarios no deben observar la comprobación. Sin embargo, si tiene un conjunto de certificados raíz existente ubicado en /etc/pki/ca-trust/extracted/pem/objsign-ca-bundle.pem, es posible que vea errores de confianza acompañados de la advertencia NU3042.
Puede no participar en la comprobación estableciendo la variable DOTNET_NUGET_SIGNATURE_VERIFICATION de entorno en false.
Análisis de código
.NET 8 incluye varios analizadores y solucionadores de código nuevos para ayudar a comprobar que usa las API de biblioteca de .NET de forma correcta y eficaz. En la tabla siguiente se resumen los nuevos analizadores.
| Identificador de la regla | Categoría | Description |
|---|---|---|
| CA1856 | Performance | Se desencadena cuando el atributo ConstantExpectedAttribute no se aplica correctamente para un parámetro. |
| CA1857 | Performance | Se desencadena cuando se anota un parámetro con ConstantExpectedAttribute , pero el argumento proporcionado no es una constante. |
| CA1858 | Performance | Para determinar si una cadena comienza con un prefijo determinado, es mejor llamar a String.StartsWith que llamar a String.IndexOf y luego comparar el resultado con cero. |
| CA1859 | Performance | Esta regla recomienda actualizar el tipo de variables locales específicas, campos, propiedades, parámetros de método y tipos devueltos de método de tipos de interfaz o abstractos a tipos concretos siempre que sea posible. El uso de tipos concretos conduce a código generado de mayor calidad. |
| CA1860 | Performance | Para determinar si un tipo de colección tiene elementos, es mejor usar Length, Counto IsEmpty que llamar a Enumerable.Any. |
| CA1861 | Performance | Las matrices constantes pasadas como argumentos no se reutilizan cuando se llama repetidamente, lo que implica que se crea una nueva matriz cada vez. Para mejorar el rendimiento, considere extraer la matriz a un campo estático sólo de lectura. |
| CA1865-CA1867 | Performance | La sobrecarga de carácter es más eficiente para una cadena con un único carácter. |
| CA2021 | Reliability | Enumerable.Cast<TResult>(IEnumerable) y Enumerable.OfType<TResult>(IEnumerable) requieren tipos compatibles para funcionar correctamente. Las conversiones ampliadas y definidas por el usuario no se admiten con tipos genéricos. |
| CA1510-CA1513 | Mantenibilidad | Los ayudantes de lanzamiento son más sencillos y eficaces que un bloque if que construye una nueva instancia de excepción. Estos cuatro analizadores se crearon para las siguientes excepciones: ArgumentNullException, ArgumentExceptionArgumentOutOfRangeExceptiony ObjectDisposedException. |
Diagnostics
La recarga activa de C# admite la modificación de genéricos
A partir de .NET 8, la recarga activa de C# admite la modificación de tipos genéricos y métodos genéricos. Al depurar aplicaciones de consola, de escritorio, móviles o webAssembly con Visual Studio, puede aplicar cambios a clases genéricas y métodos genéricos en código de C# o páginas de Razor. Para obtener más información, consulte la lista completa de ediciones admitidas por Roslyn.