Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Esta página es una referencia para las propiedades y elementos de MSBuild que puede usar para configurar proyectos de .NET.
Note
Esta página es un trabajo en curso y no enumera todas las propiedades útiles de MSBuild para el SDK de .NET. Para obtener una lista de las propiedades comunes de MSBuild, vea Propiedades comunes de MSBuild.
Propiedades de validación de ensamblado
Estas propiedades y elementos se pasan a la tarea . Para obtener más información acerca de la validación de ensamblados, consulte Validación de ensamblados.
En esta sección se documentan las siguientes propiedades de MSBuild:
- ApiCompatStrictMode
- ApiCompatValidateAssemblies
Note
Estas propiedades no forman parte del SDK de .NET (todavía). Para usarlas, también debe agregar un a Microsoft.DotNet.ApiCompat.Task.
Además, las siguientes propiedades que se documentan en las Propiedades de validación de paquetes también se aplican a la validación de ensamblados:
- ApiCompatEnableRuleAttributesMustMatch
- ApiCompatEnableRuleCannotChangeParameterName
- ApiCompatExcludeAttributesFile
- ApiCompatGenerateSuppressionFile
- ApiCompatPermitUnnecessarySuppressions
- ApiCompatPreserveUnnecessarySuppressions
- ApiCompatRespectInternals
- ApiCompatSuppressionFile
- ApiCompatSuppressionOutputFile
- NoWarn
- RoslynAssembliesPath
ApiCompatStrictMode
Cuando se establece en , la propiedad especifica que se deben realizar comprobaciones de compatibilidad de API en modo estricto.
<PropertyGroup>
<ApiCompatStrictMode>true</ApiCompatStrictMode>
</PropertyGroup>
ApiCompatValidateAssemblies
La propiedad habilita una serie de validaciones en los ensamblados especificados. Para obtener más información, consulte Validación de ensamblados.
<PropertyGroup>
<ApiCompatValidateAssemblies>true</ApiCompatValidateAssemblies>
</PropertyGroup>
Propiedades de atributo de ensamblado
- GenerateAssemblyInfo
- GeneratedAssemblyInfoFile
- IncludeSourceRevisionInInformationalVersion
- SourceRevisionId
GenerateAssemblyInfo
La propiedad controla la generación del atributo del proyecto. El valor predeterminado es . Use para deshabilitar la generación del archivo:
<PropertyGroup>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
</PropertyGroup>
El valor de configuración GeneratedAssemblyInfoFile controla el nombre del archivo generado.
Si el valor es , las propiedades del proyecto relacionadas con el paquete se transforman en atributos de ensamblado.
Para obtener más información sobre cómo generar atributos de ensamblado mediante un archivo de proyecto, vea Establecer atributos de ensamblado en un archivo de proyecto.
GeneratedAssemblyInfoFile
La propiedad define la ruta de acceso relativa o completa del archivo de información de ensamblado generado. Tiene un archivo denominado [nombre-proyecto].AssemblyInfo.[cs|vb] en el directorio (normalmente, obj) como valor predeterminado.
<PropertyGroup>
<GeneratedAssemblyInfoFile>assemblyinfo.cs</GeneratedAssemblyInfoFile>
</PropertyGroup>
IncludeSourceRevisionInInformationalVersion
La propiedad controla si el valor se anexa al atributo de ensamblado. El valor predeterminado es . Establézcalo en para deshabilitar este comportamiento:
<PropertyGroup>
<IncludeSourceRevisionInInformationalVersion>false</IncludeSourceRevisionInInformationalVersion>
</PropertyGroup>
Para obtener más información, consulte Source Link incluido en .NET SDK.
SourceRevisionId
La propiedad contiene el identificador de revisión del control de código fuente para la compilación, como un hash de confirmación de Git. A partir de .NET 8, el SDK de .NET rellena automáticamente esta propiedad con el hash de confirmación cuando Source Link está presente. Cuando se establece, su valor se anexa al atributo de ensamblado.
<PropertyGroup>
<SourceRevisionId>abc1234</SourceRevisionId>
</PropertyGroup>
Para obtener más información, consulte Source Link incluido en .NET SDK.
Propiedades del marco
En esta sección se documentan las siguientes propiedades de MSBuild:
- TargetFramework
- TargetFrameworks
- NetStandardImplicitPackageVersion
TargetFramework
La propiedad especifica la versión de la plataforma de destino de la aplicación. Para obtener una lista de los monikers de plataforma de destino válidos, vea Plataformas de destino en proyectos de estilo SDK.
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
Para obtener más información, vea Plataformas de destino en proyectos de estilo SDK.
TargetFrameworks
Use la propiedad cuando quiera que la aplicación tenga varias plataformas como destino. Para obtener una lista de los monikers de plataforma de destino válidos, vea Plataformas de destino en proyectos de estilo SDK.
Note
Si se especifica (plural), se omite (singular).
<PropertyGroup>
<TargetFrameworks>net8.0;net462</TargetFrameworks>
</PropertyGroup>
Para obtener más información, vea Plataformas de destino en proyectos de estilo SDK.
NetStandardImplicitPackageVersion
Note
Esta propiedad solo se aplica a los proyectos que usan . No se aplica a los que usan .
Use la propiedad si quiere especificar una versión del marco que sea inferior a la de la versión del metapaquete. El archivo del proyecto del ejemplo siguiente tiene como destino pero usa la versión 1.6.0 de .
<PropertyGroup>
<TargetFramework>netstandard1.3</TargetFramework>
<NetStandardImplicitPackageVersion>1.6.0</NetStandardImplicitPackageVersion>
</PropertyGroup>
Propiedades del paquete
- Propiedades descriptivas
- PackRelease
Propiedades descriptivas
Puede especificar propiedades como , , , y para describir el paquete que se crea a partir del proyecto. Para más información sobre estas y otras propiedades, vea Destino de pack.
<PropertyGroup>
...
<PackageId>ClassLibDotNetStandard</PackageId>
<Version>1.0.0</Version>
<Authors>John Doe</Authors>
<Company>Contoso</Company>
</PropertyGroup>
PackRelease
La propiedad es similar a la propiedad PublishRelease, salvo que cambia el comportamiento predeterminado de . Esta propiedad se introdujo en .NET 7.
<PropertyGroup>
<PackRelease>true</PackRelease>
</PropertyGroup>
Note
A partir del SDK de .NET 8, PackRelease el valor predeterminado es true. Para obtener más información, vea "dotnet pack" usa la configuración Release.
Propiedades de validación de paquetes
Estas propiedades y elementos se pasan a la tarea . Para obtener más información sobre la validación de paquetes, consulte Introducción a la validación de paquetes.
Para ver las propiedades de la tarea , consulte Propiedades de validación de ensamblados.
En esta sección se documentan las siguientes propiedades y elementos de MSBuild:
- ApiCompatEnableRuleAttributesMustMatch
- ApiCompatEnableRuleCannotChangeParameterName
- ApiCompatExcludeAttributesFile
- ApiCompatGenerateSuppressionFile
- ApiCompatPermitUnnecessarySuppressions
- ApiCompatPreserveUnnecessarySuppressions
- ApiCompatRespectInternals
- ApiCompatSuppressionFile
- ApiCompatSuppressionOutputFile
- EnablePackageValidation
- EnableStrictModeForBaselineValidation
- EnableStrictModeForCompatibleFrameworksInPackage
- EnableStrictModeForCompatibleTfms
- NoWarn
- PackageValidationBaselineFrameworkToIgnore
- PackageValidationBaselineName
- PackageValidationBaselineVersion
- PackageValidationReferencePath
- RoslynAssembliesPath
ApiCompatEnableRuleAttributesMustMatch
Cuando se establece en , la propiedad habilita la regla de validación que comprueba si los atributos coinciden. El valor predeterminado es .
<PropertyGroup>
<ApiCompatEnableRuleAttributesMustMatch>true</ApiCompatEnableRuleAttributesMustMatch>
</PropertyGroup>
ApiCompatEnableRuleCannotChangeParameterName
Cuando se establece en , la propiedad habilita la regla de validación que comprueba si los nombres de parámetro han cambiado en métodos públicos. El valor predeterminado es .
<PropertyGroup>
<ApiCompatEnableRuleCannotChangeParameterName>true</ApiCompatEnableRuleCannotChangeParameterName>
</PropertyGroup>
ApiCompatExcludeAttributesFile
El elemento especifica la ruta de acceso a un archivo que contiene atributos que se van a excluir en formato DocId.
<ItemGroup>
<ApiCompatExcludeAttributesFile Include="ApiCompatExcludedAttributes.txt" />
<ApiCompatExcludeAttributesFile Include="ApiCompatBaselineExcludedAttributes.txt" />
</ItemGroup>
ApiCompatGenerateSuppressionFile
La propiedad especifica si se va a generar un archivo de supresión de compatibilidad.
<PropertyGroup>
<ApiCompatGenerateSuppressionFile>true</ApiCompatGenerateSuppressionFile>
</PropertyGroup>
ApiCompatPermitUnnecessarySuppressions
La propiedad especifica si se deben permitir supresiones innecesarias en el archivo de supresión.
El valor predeterminado es .
<PropertyGroup>
<ApiCompatPermitUnnecessarySuppressions>true</ApiCompatPermitUnnecessarySuppressions>
</PropertyGroup>
ApiCompatPreserveUnnecessarySuppressions
La propiedad especifica si se deben conservar las supresiones innecesarias al volver a generar el archivo de supresión. Cuando se vuelve a generar un archivo de supresión existente, se lee su contenido, se deserializa en un conjunto de supresiones y a continuación se almacena en una lista. Es posible que algunas de las supresiones ya no sean necesarias si se ha corregido la incompatibilidad. Cuando las supresiones se serializan de nuevo en el disco, puede optar por mantener todas las expresiones existentes (deserializadas) estableciendo esta propiedad en .
El valor predeterminado es .
<PropertyGroup>
<ApiCompatPreserveUnnecessarySuppressions>true</ApiCompatPreserveUnnecessarySuppressions>
</PropertyGroup>
ApiCompatRespectInternals
La propiedad especifica si se debe comprobar la compatibilidad de las API además de las API .
<PropertyGroup>
<ApiCompatRespectInternals>true</ApiCompatRespectInternals>
</PropertyGroup>
ApiCompatSuppressionFile
El elemento especifica la ruta de acceso a uno o varios archivos de supresión desde los que se va a leer. Si no se especifica, se lee el archivo de supresión project-directory/CompatibilitySuppressions.xml (si existe).
<ItemGroup>
<ApiCompatSuppressionFile Include="CompatibilitySuppressions.xml;CompatibilitySuppressions.WasmThreads.xml" />
</ItemGroup>
ApiCompatSuppressionOutputFile
La propiedad especifica la ruta de acceso a un archivo de supresión en el que se va a escribir cuando es . Si no se especifica, se usa el primer elemento .
EnablePackageValidation
La propiedad permite una serie de validaciones en el paquete después de la tarea . Para más información, consulte Validación de paquetes.
<PropertyGroup>
<EnablePackageValidation>true</EnablePackageValidation>
</PropertyGroup>
EnableStrictModeForBaselineValidation
Cuando se establece en , la propiedad habilita el modo strict para las comprobaciones de línea base del paquete. El valor predeterminado es .
EnableStrictModeForCompatibleFrameworksInPackage
Cuando se establece en , la propiedad habilita el modo strict para ensamblados compatibles en función de su marco de destino. El valor predeterminado es .
EnableStrictModeForCompatibleTfms
Cuando se establece en , la propiedad habilita el modo strict para ensamblados de contrato e implementación para todos los marcos de destino compatibles. El valor predeterminado es .
NoWarn
La propiedad especifica los id. de diagnóstico que se van a suprimir.
<PropertyGroup>
<NoWarn>$(NoWarn);PKV0001</NoWarn>
</PropertyGroup>
PackageValidationBaselineFrameworkToIgnore
El elemento especifica un marco de destino que se omitirá desde el paquete de línea base. La cadena de marco debe coincidir exactamente con el nombre de carpeta del paquete de línea base.
<ItemGroup>
<PackageValidationBaselineFrameworkToIgnore Include="netcoreapp2.1" />
</ItemGroup>
PackageValidationBaselineName
La propiedad especifica el nombre del paquete de línea base con el que validar el paquete actual. Si no se especifica, se usa el valor .
PackageValidationBaselineVersion
La propiedad especifica la versión del paquete de línea base con la que validar el paquete actual.
PackageValidationReferencePath
El elemento especifica la ruta de acceso del directorio donde se puede encontrar el ensamblado de referencia por TFM.
<ItemGroup>
<PackageValidationReferencePath Include="path/to/reference-assembly" TargetFramework="net9.0" />
</ItemGroup>
RoslynAssembliesPath
La propiedad especifica la ruta de acceso al directorio que contiene los ensamblados Microsoft.CodeAnalysis que desea usar. Solo tiene que establecer esta propiedad si desea probar con un compilador más reciente que lo que hay en el SDK.
Propiedades relacionadas con la publicación
En esta sección se documentan las siguientes propiedades de MSBuild:
- AppendRuntimeIdentifierToOutputPath
- AppendTargetFrameworkToOutputPath
- CopyLocalLockFileAssemblies
- ErrorOnDuplicatePublishOutputFiles
- GenerateRuntimeConfigDevFile
- GenerateRuntimeConfigurationFiles
- GenerateSatelliteAssembliesForCore
- IsPublishable
- PreserveCompilationContext
- PreserveCompilationReferences
- ProduceReferenceAssemblyInOutDir
- PublishDocumentationFile
- PublishDocumentationFiles
- PublishReferencesDocumentationFiles
- PublishReferencesSymbols
- PublishRelease
- PublishSelfContained
- RollForward
- RuntimeFrameworkVersion
- RuntimeIdentifier
- RuntimeIdentifiers
- SatelliteResourceLanguages
- SelfContained
- UseAppHost
AppendTargetFrameworkToOutputPath
La propiedad controla si el moniker de la plataforma de destino (TFM) se anexa a la ruta de salida (definida por OutputPath). El SDK de .NET anexa automáticamente la plataforma de destino y, si está presente, el identificador en tiempo de ejecución a la ruta de acceso de salida. El hecho de establecer en impide que el TFM se anexe a la ruta de salida. Sin embargo, sin el TFM en la ruta de salida, es posible que varios artefactos de compilación se sobrescriban entre sí.
Por ejemplo, para una aplicación de .NET 5, la ruta de acceso de salida cambia de bin\Debug\net5.0 a bin\Debug con la siguiente configuración:
<PropertyGroup>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
</PropertyGroup>
AppendRuntimeIdentifierToOutputPath
La propiedad controla si el id. del entorno de ejecución (RID) se anexa a la ruta de salida. El SDK de .NET anexa automáticamente la plataforma de destino y, si está presente, el identificador en tiempo de ejecución (RID) a la ruta de acceso de salida. El hecho de establecer en impide que el RID se anexe a la ruta de salida. (Sin embargo, el RID todavía se anexa a la ruta de acceso de publicación. Para obtener más información, vea dotnet/sdk#12114).
Por ejemplo, para una aplicación de .NET 9 y un RID de win-x64, la siguiente configuración cambia la ruta de acceso de salida de bin\Debug\net9.0\win-x64 a bin\Debug\net9.0:
<PropertyGroup>
<AppendRuntimeIdentifierToOutputPath>false</AppendRuntimeIdentifierToOutputPath>
</PropertyGroup>
CopyLocalLockFileAssemblies
La propiedad es útil para los proyectos de complementos que tienen dependencias de otras bibliotecas. Si establece esta propiedad en , las dependencias de paquetes NuGet transitivas se copian en el directorio de salida. Esto significa que puede usar la salida de para ejecutar el complemento en cualquier equipo.
<PropertyGroup>
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
</PropertyGroup>
El valor predeterminado de puede variar en función del tipo de salida. Por ejemplo, para las bibliotecas de clases, el valor predeterminado es , mientras que para las aplicaciones de consola el valor predeterminado es . Puede especificar esta propiedad explícitamente para invalidar el valor predeterminado si es necesario.
Tip
Como alternativa, puede usar para publicar la biblioteca de clases. Para obtener más información, vea dotnet publish.
ErrorOnDuplicatePublishOutputFiles
La propiedad está relacionada con si el SDK genera el error NETSDK1148 cuando MSBuild detecta archivos duplicados en la salida de la publicación, pero no puede determinar qué archivos se van a quitar. Establezca la propiedad en si no quiere que se genere el error.
<PropertyGroup>
<ErrorOnDuplicatePublishOutputFiles>false</ErrorOnDuplicatePublishOutputFiles>
</PropertyGroup>
Esta propiedad se introdujo en .NET 6.
GenerateRuntimeConfigDevFile
A partir del SDK de .NET 6, el archivo [Appname].runtimesettings.dev.json es no se genera de forma predeterminada en tiempo de compilación. Si desea que se genere este archivo, establezca la propiedad en .
<PropertyGroup>
<GenerateRuntimeConfigDevFile>true</GenerateRuntimeConfigDevFile>
</PropertyGroup>
GenerateRuntimeConfigurationFiles
La propiedad controla si las opciones de configuración del entorno de ejecución se copian del archivo runtimeconfig.template.json al archivo [appname].runtimeconfig.json. Para las aplicaciones en las que se necesita un archivo runtimeconfig.json, esto es, aquellas cuyo valor de es , esta propiedad tiene como valor predeterminado.
<PropertyGroup>
<GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>
</PropertyGroup>
GenerateSatelliteAssembliesForCore
La propiedad GenerateSatelliteAssembliesForCore controla si los ensamblados satélite se generan mediante csc.exe o Al.exe (Assembly Linker) en proyectos de .NET Framework. (.NET proyectos core y .NET 5+ siempre usan csc.exe para generar ensamblados satélite). Para los proyectos de .NET Framework, los ensamblados satélite se crean mediante al.exe, de forma predeterminada. Al establecer la propiedad en , los ensamblados satélite se crean mediante csc.exe en su lugar. El uso de csc.exe puede ser ventajoso en las siguientes situaciones:
- Quiere usar la opción del compilador C#.
- Está limitado por el hecho de que al.exe no tiene soporte para la firma pública y controla de forma errónea.
<PropertyGroup>
<GenerateSatelliteAssembliesForCore>true</GenerateSatelliteAssembliesForCore>
</PropertyGroup>
IsPublishable
La propiedad permite ejecutar el destino . Esta propiedad solo afecta a los procesos que usan archivos .*projy al destino , como el comando dotnet publish. No afecta a la publicación en Visual Studio, que usa el destino PublishOnly. El valor predeterminado es .
Esta propiedad es útil si se ejecuta en un archivo de solución, ya que permite la selección automática de los proyectos que deben publicarse.
<PropertyGroup>
<IsPublishable>false</IsPublishable>
</PropertyGroup>
PreserveCompilationContext
La propiedad permite que una aplicación compilada o publicada compile más código en tiempo de ejecución con la misma configuración que se usó en tiempo de compilación. Los ensamblados a los que se hace referencia en el tiempo de compilación se copiarán en el subdirectorio ref del directorio de salida. Los nombres de los ensamblados de referencia se almacenan en el archivo .deps.json de la aplicación junto con las opciones que se pasan al compilador. Puede recuperar esta información mediante las propiedades y .
Esta funcionalidad se usa principalmente internamente por ASP.NET Core páginas de MVC y Razor para admitir la compilación en tiempo de ejecución de archivos de Razor.
<PropertyGroup>
<PreserveCompilationContext>true</PreserveCompilationContext>
</PropertyGroup>
PreserveCompilationReferences
La propiedad es similar a la propiedad PreserveCompilationContext, salvo que solo copia los ensamblados a los que se hace referencia en el directorio de publicación, sin el archivo .deps.json.
<PropertyGroup>
<PreserveCompilationReferences>true</PreserveCompilationReferences>
</PropertyGroup>
Para obtener más información, consulte las propiedades del SDK de Razor.
ProduceReferenceAssemblyInOutDir
En .NET 5 y versiones anteriores, los ensamblados de referencia siempre se escriben en el directorio OutDir. En .NET 6 y versiones posteriores, puede usar la propiedad ProduceReferenceAssemblyInOutDir para controlar si los ensamblados de referencia se escriben en el directorio OutDir. El valor predeterminado es , y los ensamblados de referencia solo se escriben en el directorio . Establezca el valor en para escribir ensamblados de referencia en el directorio .
<PropertyGroup>
<ProduceReferenceAssemblyInOutDir>true</ProduceReferenceAssemblyInOutDir>
</PropertyGroup>
Para obtener más información, consulte Escritura de ensamblados de referencia en la salida intermedia.
PublishDocumentationFile
Cuando esta propiedad es , el archivo de documentación XML del proyecto, si se genera uno, se incluye en la salida de publicación del proyecto. El valor predeterminado de esta propiedad es .
Tip
Establezca GenerateDocumentationFile en para generar un archivo de documentación XML en tiempo de compilación.
PublishDocumentationFiles
Esta propiedad es una marca de habilitación para otras propiedades que controlan si se copian varios tipos de archivos de documentación XML en el directorio de publicación de manera predeterminada, es decir, PublishDocumentationFile y PublishReferencesDocumentationFiles. Si esas propiedades no están establecidas y esta propiedad está establecida, esas propiedades tendrán como valor predeterminado . El valor predeterminado de esta propiedad es .
PublishReferencesDocumentationFiles
Cuando esta propiedad es , los archivos de documentación XML de las referencias del proyecto se copian en el directorio de publicación, en lugar de solo recursos en tiempo de ejecución como archivos DLL. El valor predeterminado de esta propiedad es .
PublishReferencesSymbols
Cuando esta propiedad es , los archivos de símbolos (también conocidos como archivos PDB) para las referencias del proyecto se copian en el directorio de publicación, en lugar de solo recursos en tiempo de ejecución como archivos DLL. El valor predeterminado de esta propiedad es .
PublishRelease
La propiedad informa para usar la configuración de de forma predeterminada en lugar de la configuración de . Esta propiedad se introdujo en .NET 7.
<PropertyGroup>
<PublishRelease>true</PublishRelease>
</PropertyGroup>
Note
- A partir del SDK de .NET 8,
PublishReleasetiene como valor predeterminadotruepara proyectos que tienen como destino .NET 8 o posterior. Para obtener más información, vea "dotnet publish" usa la configuración Release. - Esta propiedad no afecta al comportamiento de
dotnet build /t:Publishy cambia la configuración solo al publicar a través de la CLI de .NET.
PublishSelfContained
La propiedad informa a para publicar una aplicación como una aplicación independiente. Esta propiedad es útil cuando no se puede usar el argumento para el comando dotnet publish, por ejemplo, al publicar en el nivel de solución. En ese caso, puede agregar la propiedad MSBuild a un proyecto o archivo Directory.Build.Props.
Esta propiedad se introdujo en .NET 7. Es similar a la propiedad SelfContained, salvo que es específica del verbo . Se recomienda usar en lugar de .
<PropertyGroup>
<PublishSelfContained>true</PublishSelfContained>
</PropertyGroup>
RollForward
La propiedad controla cómo elige la aplicación un entorno de ejecución cuando hay varias versiones disponibles. Este valor se representa en .runtimeconfig.json como el valor .
<PropertyGroup>
<RollForward>LatestMinor</RollForward>
</PropertyGroup>
Establezca en uno de los valores siguientes:
| Value | Description |
|---|---|
Minor |
Default si no se especifica. Puesta al día a la siguiente versión secundaria disponible más alta (y la versión de revisión más alta disponible dentro de esa versión secundaria), si falta la versión secundaria solicitada. Si se encuentra la versión secundaria solicitada, se usa la directiva . |
Major |
Puesta al día a la siguiente versión principal más alta disponible (en su versión secundaria más baja disponible y la versión de revisión más alta disponible dentro de esa versión secundaria), si falta la versión principal solicitada. Si se encuentra la versión principal solicitada, se usa la directiva . |
LatestPatch |
Puesta al día a la versión de revisión más alta disponible para las versiones principales y secundarias solicitadas. Este valor deshabilita la puesta al día de versiones secundarias. |
LatestMinor |
Puesta al día a la versión secundaria más alta disponible para la versión principal solicitada (y la versión de revisión más alta disponible dentro de esa versión secundaria), incluso si la versión secundaria solicitada está presente. |
LatestMajor |
Puesta al día a la versión principal más alta disponible (y la versión secundaria y de revisión más alta disponible dentro de esa versión principal), incluso si está presente la principal solicitada. |
Disable |
No se realiza la puesta al día, solo se enlaza a la versión especificada. No se recomienda esta directiva para uso general, ya que deshabilita la capacidad de puesta al día con las revisiones más recientes. Este valor solo se recomienda a efectos de pruebas. |
Para obtener más información, vea Control del comportamiento de la puesta al día.
RuntimeFrameworkVersion
La propiedad especifica la versión del entorno de ejecución que se usará al realizar la publicación. Especifique una versión del entorno de ejecución:
<PropertyGroup>
<RuntimeFrameworkVersion>5.0.7</RuntimeFrameworkVersion>
</PropertyGroup>
Al publicar una aplicación dependiente del marco, este valor especifica la versión mínima necesaria. Al publicar una aplicación independiente, este valor especifica la versión exacta necesaria.
RuntimeIdentifier
La propiedad permite especificar un único identificador de tiempo de ejecución (RID) para el proyecto. El RID permite publicar una implementación autocontenida.
<PropertyGroup>
<RuntimeIdentifier>linux-x64</RuntimeIdentifier>
</PropertyGroup>
RuntimeIdentifiers
La propiedad permite especificar una lista delimitada por puntos y coma de identificadores de tiempo ejecución (RID) para el proyecto. Use esta propiedad si tiene que publicar para varios entornos de ejecución. se usa en el momento de la restauración para asegurarse de que los recursos adecuados están en el gráfico.
Tip
(singular) puede proporcionar compilaciones más rápidas cuando solo se requiere un entorno de ejecución.
<PropertyGroup>
<RuntimeIdentifiers>win-x64;osx-x64;linux-x64</RuntimeIdentifiers>
</PropertyGroup>
SatelliteResourceLanguages
La propiedad permite especificar los lenguajes para los que desea conservar los ensamblados de recursos satélite durante la compilación y publicación. Muchos paquetes NuGet incluyen ensamblados satélite de recursos localizados en el paquete principal. En el caso de los proyectos que hacen referencia a estos paquetes NuGet que no requieren recursos localizados, los ensamblados localizados pueden inflar innecesariamente el tamaño de la compilación y la publicación. Al agregar la propiedad al archivo del proyecto, solo se incluirán en la salida de compilación y publicación los ensamblados localizados para los lenguajes especificados. Por ejemplo, en el siguiente archivo del proyecto, solo se conservarán los ensamblados satélite de recursos en inglés (EE. UU.) y en alemán (Alemania).
<PropertyGroup>
<SatelliteResourceLanguages>en-US;de-DE</SatelliteResourceLanguages>
</PropertyGroup>
Note
Debe especificar esta propiedad en el proyecto que hace referencia al paquete NuGet con ensamblados satélite de recursos localizados.
Para especificar varios idiomas como argumento para , debe agregar tres pares de comillas alrededor de los identificadores de idioma. Por ejemplo:
dotnet msbuild multi.msbuildproj -p:SatelliteResourceLanguages="""de;en"""
SelfContained
La propiedad informa a y para compilar una aplicación como una aplicación independiente. Esta propiedad es útil cuando no se puede usar el argumento para el comando dotnet, por ejemplo, al publicar en el nivel de solución. En ese caso, puede agregar la propiedad MSBuild a un proyecto o archivo Directory.Build.Props.
Esta propiedad es similar a la propiedad PublishSelfContained. Se recomienda usar en lugar de .
<PropertyGroup>
<SelfContained>true</SelfContained>
</PropertyGroup>
UseAppHost
La propiedad controla si se crea o no un archivo ejecutable nativo para una implementación. Un archivo ejecutable nativo es obligatorio para las implementaciones independientes. De forma predeterminada, se crea un archivo ejecutable dependiente del marco. Establezca la propiedad en para deshabilitar la generación del archivo ejecutable.
<PropertyGroup>
<UseAppHost>false</UseAppHost>
</PropertyGroup>
Para obtener más información sobre la implementación, consulte .NET implementación de aplicaciones.
Propiedades relacionadas con el recorte
Hay numerosas propiedades de MSBuild disponibles para ajustar el recorte, que es una característica que recorta el código sin usar de las implementaciones autocontenidas. Estas opciones se describen en detalle en Opciones de recorte. En la tabla siguiente se proporciona una referencia rápida.
| Property | Values | Description |
|---|---|---|
PublishTrimmed |
o | Controla si el recorte está habilitado durante la publicación. |
TrimMode |
o | El valor predeterminado es . Controla la granularidad de recorte. |
SuppressTrimAnalysisWarnings |
o | Controla si se generan advertencias de análisis de recorte. |
EnableTrimAnalyzer |
o | Controla si se generan advertencias de análisis de recorte. Puede habilitar el análisis incluso si está establecido en . |
ILLinkTreatWarningsAsErrors |
o | Controla si las advertencias de recorte se tratan como errores. Por ejemplo, puede que desee establecer esta propiedad en cuando se establece en . |
TrimmerSingleWarn |
o | Controla si se muestra una sola advertencia por ensamblado o todas las advertencias. |
TrimmerRemoveSymbols |
o | Controla si todos los símbolos se quitan de una aplicación recortada. |
Propiedades relacionadas con la compilación
En esta sección se documentan las siguientes propiedades de MSBuild:
- ContinuousIntegrationBuild
- CopyDebugSymbolFilesFromPackages
- CopyDocumentationFilesFromPackages
- DisableImplicitFrameworkDefines
- DocumentationFile
- EmbeddedResourceUseDependentUponConvention
- EnablePreviewFeatures
- EnableWindowsTargeting
- GenerateDocumentationFile
- GenerateRequiresPreviewFeaturesAttribute
- OptimizeImplicitlyTriggeredBuild
- DisableRuntimeMarshalling
- BuildWithNetFrameworkHostedCompiler
- RoslynCompilerType
Las opciones del compilador de C# (como y ) también se pueden especificar como propiedades de MSBuild en el archivo del proyecto. Para obtener más información, vea Opciones del compilador de C#.
ContinuousIntegrationBuild
La propiedad indica si una compilación se está ejecutando en un servidor de integración continua (CI). Cuando se establece en , esta propiedad habilita la configuración que solo se aplica a las compilaciones oficiales, en lugar de las compilaciones locales en un equipo para desarrolladores. Por ejemplo, las rutas de acceso de archivo almacenadas se normalizan para las compilaciones oficiales. Pero en un equipo de desarrollo local, el depurador no puede encontrar archivos de código fuente locales si se normalizan las rutas de acceso de archivo.
Puede usar la variable del sistema de CI para establecer condicionalmente la propiedad . Por ejemplo, el nombre de la variable para Azure Pipelines es TF_BUILD:
<PropertyGroup Condition="'$(TF_BUILD)' == 'true'">
<ContinuousIntegrationBuild>true</ContinuousIntegrationBuild>
</PropertyGroup>
Para Acciones de GitHub, el nombre de la variable es GITHUB_ACTIONS:
<PropertyGroup Condition="'$(GITHUB_ACTIONS)' == 'true'">
<ContinuousIntegrationBuild>true</ContinuousIntegrationBuild>
</PropertyGroup>
CopyDebugSymbolFilesFromPackages
Cuando esta propiedad se establece en , todos los archivos de símbolos (también conocidos como archivos PDB) de los elementos del proyecto se copian en la salida de la compilación. Estos archivos pueden proporcionar seguimientos de pila más informativos para las excepciones y hacer que los volcados de memoria y los seguimientos de la aplicación en ejecución sean más fáciles de entender. Sin embargo, incluir estos archivos da como resultado un mayor tamaño del conjunto de implementación.
Esta propiedad se introdujo en .NET SDK 7.0.100, aunque el valor predeterminado es no especificarse.
CopyDocumentationFilesFromPackages
Cuando esta propiedad se establece en , todos los archivos de documentación XML generados de los elementos del proyecto se copian en la salida de la compilación. Tenga en cuenta que la habilitación de esta característica dará lugar a un mayor tamaño del conjunto de implementación.
Esta propiedad se introdujo en .NET SDK 7.0.100, aunque el valor predeterminado es no especificarse.
DisableImplicitFrameworkDefines
La propiedad DisableImplicitFrameworkDefines controla si el SDK genera símbolos de preprocesador para el marco de destino y la plataforma del proyecto de .NET. Cuando esta propiedad se establece en o no está establecida (que es el valor predeterminado), se generan símbolos de preprocesador para:
- Marco sin versión (, , )
- Marco con versión (, , )
- Marco con límite mínimo de versión (, , )
Para obtener más información sobre los monikers del marco de destino y estos símbolos de preprocesador implícitos, consulte Marcos de destino.
Además, si especifica una plataforma de destino específica del sistema operativo en el proyecto (por ejemplo ), se generan los siguientes símbolos de preprocesador:
- Plataforma sin versión (, , )
- Plataforma con versión ()
- Plataforma con límite mínimo de versión ()
Para obtener más información sobre los monikers de plataforma de destino específicos del sistema operativo, consulte TFMs específicos del sistema operativo.
Por último, si la plataforma de destino implica la compatibilidad con plataformas de destino anteriores, se emiten símbolos de preprocesador para esas plataformas anteriores. Por ejemplo, implica compatibilidad con y así sucesivamente de vuelta a . Por lo tanto, para cada una de estas plataformas de destino, se definirá el símbolo de marco con límite mínimo de versión.
DocumentationFile
La propiedad permite especificar un nombre de archivo para el archivo XML que contiene la documentación de la biblioteca. Para que IntelliSense funcione correctamente con la documentación, el nombre de archivo debe ser el mismo que el nombre del ensamblado y debe estar en el mismo directorio que este. Si no especifica esta propiedad pero establece GenerateDocumentationFile en , el nombre del archivo de documentación tiene como valor predeterminado el nombre del ensamblado, pero con una extensión de archivo .xml. Por este motivo, suele ser más fácil omitir esta propiedad y usar en su lugar la propiedad GenerateDocumentationFile.
Si no especifica esta propiedad pero establece GenerateDocumentationFile en , el compilador no genera un archivo de documento. Si no especifica esta propiedad y omite la propiedad GenerateDocumentationFile, el compilador genera un archivo de documentación.
<PropertyGroup>
<DocumentationFile>path/to/file.xml</DocumentationFile>
</PropertyGroup>
EmbeddedResourceUseDependentUponConvention
La propiedad define si los nombres del archivo de manifiesto del recurso se generan a partir de la información de tipo de los archivos de código fuente que se ubican conjuntamente con archivos de recursos. Por ejemplo, si Form1.resx está en la misma carpera que Form1.cs, y se establece en , el archivo .resources generado toma su nombre del primer tipo que se define en Form1.cs. Si es el primer tipo definido en Form1.cs, el nombre de archivo generado es myNameSpace.Form1.Resources.
Note
Si se especifican los metadatos , o para un elemento , el nombre del archivo de manifiesto generado para ese archivo de recurso se basa en esos metadatos.
De forma predeterminada, en un nuevo proyecto de .NET destinado a .NET Core 3.0 o una versión posterior, esta propiedad se establece en true. Si se establece en y no se especifica ningún metadato , o para el elemento del archivo de proyecto, el nombre del archivo de manifiesto del recurso se basa en el espacio de nombres raíz del proyecto y en la ruta de acceso relativa al archivo .resx. Para más información, consulte Denominación de los archivos de manifiesto de recurso.
<PropertyGroup>
<EmbeddedResourceUseDependentUponConvention>true</EmbeddedResourceUseDependentUponConvention>
</PropertyGroup>
EnablePreviewFeatures
La propiedad define si el proyecto depende de las API o ensamblados que se decoran con el atributo . Este atributo se utiliza para indicar que una API o un ensamblado utilizan características que se consideran en versión preliminar para la versión del SDK que se está utilizando. Las características en versión preliminar no se admiten y se pueden quitar en una versión futura. Para habilitar el uso de características en versión preliminar, establezca la propiedad en .
<PropertyGroup>
<EnablePreviewFeatures>True</EnablePreviewFeatures>
</PropertyGroup>
Cuando un proyecto contiene esta propiedad establecida en , se agrega el siguiente atributo de nivel de ensamblado al archivo AssemblyInfo.cs:
[assembly: RequiresPreviewFeatures]
Un analizador advierte si este atributo está presente en las dependencias de los proyectos en los que no está establecido en .
Los autores de bibliotecas que pretenden enviar ensamblados de versión preliminar deben establecer esta propiedad en . Si un ensamblado necesita enviarse con una mezcla de API que están en versión preliminar y otras que no lo están, consulte la sección GenerateRequiresPreviewFeaturesAttribute a continuación.
EnableWindowsTargeting
Establezca la propiedad />
Note
Esta propiedad se recomienda actualmente para permitir el desarrollo en plataformas que no son de Windows. Pero cuando la aplicación esté lista para publicarse, debe basarse en Windows. Al compilar en una plataforma que no sea de Windows, es posible que la salida no sea la misma que al compilar en Windows. En concreto, el archivo ejecutable no está marcado como una aplicación de Windows (lo que significa que siempre iniciará una ventana de consola) y no tendrá un icono incrustado.
<PropertyGroup>
<EnableWindowsTargeting>true</EnableWindowsTargeting>
</PropertyGroup>
GenerateDocumentationFile
La propiedad controla si el compilador genera un archivo de documentación XML para la biblioteca. Si establece esta propiedad en y no especifica un nombre de archivo a través de la propiedad DocumentationFile, el archivo XML generado se coloca en el mismo directorio de salida que el ensamblado y tiene el mismo nombre de archivo (pero con una extensión .xml).
<PropertyGroup>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
</PropertyGroup>
Para obtener más información sobre cómo generar documentación a partir de comentarios de código, vea XML documentation comments (C#), Document your code with XML (Visual Basic) or Document your code with XML (F#).
GenerateRequiresPreviewFeaturesAttribute
La propiedad está estrechamente relacionada con la propiedad EnablePreviewFeatures. Si su biblioteca utiliza características en versión preliminar pero no desea que todo el ensamblado se marque con el atributo , lo que requeriría que cualquier consumidor habilitara las características en versión preliminar, establezca esta propiedad en .
<PropertyGroup>
<EnablePreviewFeatures>True</EnablePreviewFeatures>
<GenerateRequiresPreviewFeaturesAttribute>False</GenerateRequiresPreviewFeaturesAttribute>
</PropertyGroup>
Important
Si establece la propiedad en , debe estar seguro de decorar todas las API públicas que se basan en características en versión preliminar con .
OptimizeImplicitlyTriggeredBuild
Para acelerar el tiempo de compilación, las compilaciones desencadenadas implícitamente por Visual Studio omitir el análisis de código, incluido el análisis que acepta valores NULL. Visual Studio desencadena una compilación implícita al ejecutar pruebas, por ejemplo. Sin embargo, las compilaciones implícitas solo se optimizan cuando no es . Si ha establecido en pero todavía desea optimizar las compilaciones desencadenadas implícitamente, puede establecer en . Para desactivar la optimización de compilación para compilaciones desencadenadas implícitamente, establezca en .
<PropertyGroup>
<OptimizeImplicitlyTriggeredBuild>True</OptimizeImplicitlyTriggeredBuild>
</PropertyGroup>
DisableRuntimeMarshalling
La propiedad le permite especificar que desea deshabilitar la compatibilidad de serialización en runtime para el proyecto. Si esta propiedad se establece en , se agrega al ensamblado y cualquier interoperabilidad basada en P/Invokes o basada en delegados seguirá las reglas para la serialización en tiempo de ejecución deshabilitada.
<PropertyGroup>
<DisableRuntimeMarshalling>True</DisableRuntimeMarshalling>
</PropertyGroup>
BuildWithNetFrameworkHostedCompiler
Especificar es el equivalente de especificar . Para obtener más información, vea RoslynCompilerType. Especificar garantiza que la participación automática en no se produzca. Si se especifica explícitamente, no tiene ningún efecto.
RoslynCompilerType
La propiedad RoslynCompilerType controla la versión del compilador de C# o Visual Basic. Se reconocen los siguientes valores:
-
Core: use el compilador que viene con el SDK de .NET. Este es el valor predeterminado desde .NET 10, incluso cuando se usa MSBuild de .NET Framework. -
Framework: use el compilador que viene con MSBuild de .NET Framework. -
FrameworkPackage: al usar MSBuild de .NET Framework, descargue y use un paquete con el compilador de .NET Framework que corresponda a la versión del SDK de .NET.
Propiedades de inclusión de elementos predeterminados
En esta sección se documentan las siguientes propiedades de MSBuild:
- DefaultItemExcludesInProjectFolder
- DefaultItemExcludes
- EnableDefaultCompileItems
- EnableDefaultEmbeddedResourceItems
- EnableDefaultItems
- EnableDefaultNoneItems
Para obtener más información, consulte Inclusiones y exclusiones predeterminadas.
DefaultItemExcludes
Use la propiedad para definir patrones globales para archivos y carpetas que deban excluirse de los patrones globales de inclusión, exclusión y eliminación. De forma predeterminada, las carpetas ./bin y ./obj se excluyen de los patrones globales.
<PropertyGroup>
<DefaultItemExcludes>$(DefaultItemExcludes);**/*.myextension</DefaultItemExcludes>
</PropertyGroup>
Note
La propiedad excluye los archivos y las carpetas de que está viendo . Para obtener más información, vea Omitir carpetas y archivos especificados de .
DefaultItemExcludesInProjectFolder
Use la propiedad para definir patrones globales para archivos y carpetas de la carpeta del proyecto que deban excluirse de los patrones globales de inclusión, exclusión y eliminación. De forma predeterminada, las carpetas que empiezan por un punto (), como .git y .vs, se excluyen de los patrones globales.
Esta propiedad es muy similar a otra, , salvo por el hecho de que esta solo tiene en cuenta los archivos y las carpetas de la carpeta del proyecto. En el caso de que un patrón global pretenda, de forma no intencionada, relacionar elementos de fuera de la carpeta del proyecto con una ruta de acceso relativa, use la propiedad , en lugar de .
<PropertyGroup>
<DefaultItemExcludesInProjectFolder>$(DefaultItemExcludesInProjectFolder);**/myprefix*/**</DefaultItemExcludesInProjectFolder>
</PropertyGroup>
EnableDefaultItems
La propiedad controla si los elementos de compilación, los elementos de los recursos incrustados y los elementos se incluyen en el proyecto de forma implícita. El valor predeterminado es . Establezca la propiedad en para deshabilitar toda inclusión de archivos implícita.
<PropertyGroup>
<EnableDefaultItems>false</EnableDefaultItems>
</PropertyGroup>
EnableDefaultCompileItems
La propiedad controla si los elementos de compilación se incluyen en el proyecto de forma implícita. El valor predeterminado es . Establezca la propiedad en para deshabilitar la inclusión implícita de los archivos *.cs, así como la de otras extensiones de nombres de archivos.
<PropertyGroup>
<EnableDefaultCompileItems>false</EnableDefaultCompileItems>
</PropertyGroup>
EnableDefaultEmbeddedResourceItems
La propiedad controla si los elementos de los recursos incrustados se incluyen en el proyecto de forma implícita. El valor predeterminado es . Establezca la propiedad en para deshabilitar la inclusión implícita de los archivos de los recursos incrustados.
<PropertyGroup>
<EnableDefaultEmbeddedResourceItems>false</EnableDefaultEmbeddedResourceItems>
</PropertyGroup>
EnableDefaultNoneItems
La propiedad controla si los elementos (archivos que no tienen ningún rol en el proceso de compilación) se incluyen implícitamente en el proyecto. El valor predeterminado es . Establezca la propiedad en para deshabilitar la inclusión implícita de elementos .
<PropertyGroup>
<EnableDefaultNoneItems>false</EnableDefaultNoneItems>
</PropertyGroup>
Propiedades de análisis de código
En esta sección se documentan las siguientes propiedades de MSBuild:
- AnalysisLevel
- CategoríaAnalysisLevel
- AnalysisMode
- CategoríaAnalysisMode
- CodeAnalysisTreatWarningsAsErrors
- EnableNETAnalyzers
- EnforceCodeStyleInBuild
- _SkipUpgradeNetAnalyzersNuGetWarning
AnalysisLevel
La propiedad AnalysisLevel permite especificar un conjunto de analizadores de código que se ejecutarán según una versión de .NET. Cada versión de .NET tiene un conjunto de reglas de análisis de código. De ese conjunto, las reglas que están habilitadas de forma predeterminada para esa versión analizan el código. Por ejemplo, si actualiza de .NET 8 a .NET 9, pero no quiere que cambie el conjunto predeterminado de reglas de análisis de código, establezca AnalysisLevel en 8.
<PropertyGroup>
<AnalysisLevel>8</AnalysisLevel>
</PropertyGroup>
Opcionalmente, puede especificar un valor compuesto para esta propiedad que también especifica cómo habilitar las reglas de forma agresiva. Los valores compuestos adoptan el formato , donde el valor es uno de los valores de AnalysisMode. En el ejemplo siguiente se usa la versión de los analizadores de código y se habilita el conjunto de reglas.
<PropertyGroup>
<AnalysisLevel>preview-recommended</AnalysisLevel>
</PropertyGroup>
Valor predeterminado:
- Si el proyecto tiene como destino .NET 5 o posterior, o si ha agregado la propiedad AnalysisMode, el valor predeterminado es
latest. - De lo contrario, se omite esta propiedad, a menos que se agregue explícitamente al archivo de proyecto.
En la tabla siguiente se muestran los valores que puede especificar.
| Value | Meaning |
|---|---|
latest |
Se usan los analizadores de código que se han publicado más recientemente. Este es el valor predeterminado. |
latest-<mode> |
Se usan los analizadores de código que se han publicado más recientemente. El valor determina las reglas que están habilitadas. |
preview |
Se usan los analizadores de código más recientes, incluso si están en versión preliminar. |
preview-<mode> |
Se usan los analizadores de código más recientes, incluso si están en versión preliminar. El valor determina las reglas que están habilitadas. |
10.0 |
Se usa el conjunto de reglas que estaba disponible para la versión .NET 10, incluso si hay reglas más recientes disponibles. |
10.0-<mode> |
Se usa el conjunto de reglas que estaba disponible para la versión .NET 10, incluso si hay reglas más recientes disponibles. El valor determina las reglas que están habilitadas. |
10 |
Se usa el conjunto de reglas que estaba disponible para la versión .NET 10, incluso si hay reglas más recientes disponibles. |
10-<mode> |
Se usa el conjunto de reglas que estaba disponible para la versión .NET 10, incluso si hay reglas más recientes disponibles. El valor determina las reglas que están habilitadas. |
9.0 |
Se usa el conjunto de reglas que estaba disponible para la versión de .NET 9, incluso si hay reglas más recientes disponibles. |
9.0-<mode> |
Se usa el conjunto de reglas que estaba disponible para la versión de .NET 9, incluso si hay reglas más recientes disponibles. El valor determina las reglas que están habilitadas. |
9 |
Se usa el conjunto de reglas que estaba disponible para la versión de .NET 9, incluso si hay reglas más recientes disponibles. |
9-<mode> |
Se usa el conjunto de reglas que estaba disponible para la versión de .NET 9, incluso si hay reglas más recientes disponibles. El valor determina las reglas que están habilitadas. |
8.0 |
Se usa el conjunto de reglas que estaba disponible para la versión .NET 8, incluso si hay reglas más recientes disponibles. |
8.0-<mode> |
Se usa el conjunto de reglas que estaba disponible para la versión .NET 8, incluso si hay reglas más recientes disponibles. El valor determina las reglas que están habilitadas. |
8 |
Se usa el conjunto de reglas que estaba disponible para la versión .NET 8, incluso si hay reglas más recientes disponibles. |
8-<mode> |
Se usa el conjunto de reglas que estaba disponible para la versión .NET 8, incluso si hay reglas más recientes disponibles. El valor determina las reglas que están habilitadas. |
Note
- Si establece EnforceCodeStyleInBuilden , esta propiedad afecta a las reglas de estilo de código (IDEXXXX) (además de las reglas de calidad de código).
- Si establece un valor compuesto para , no es necesario especificar un valor de AnalysisMode. Sin embargo, si lo hace, tiene prioridad sobre .
- Esta propiedad no tiene ningún efecto en el análisis de código en proyectos que no hacen referencia a un SDK de project, por ejemplo, proyectos heredados de .NET Framework que hacen referencia al paquete NuGet Microsoft.CodeAnalysis.NetAnalyzers. Para obtener más información, consulte Habilitación del análisis de código en proyectos heredados.
Categoría
Esta propiedad es igual que AnalysisLevel, salvo que solo se aplica a una categoría de reglas de análisis de código específica. Esta propiedad permite usar una versión distinta de los analizadores de código para una categoría específica o bien habilitar o deshabilitar reglas en un nivel diferente al de las otras categorías de reglas. Si omite esta propiedad para una categoría de reglas concreta, su valor predeterminado es AnalysisLevel. Los valores disponibles son los mismos que para AnalysisLevel.
<PropertyGroup>
<AnalysisLevelSecurity>preview</AnalysisLevelSecurity>
</PropertyGroup>
<PropertyGroup>
<AnalysisLevelSecurity>preview-recommended</AnalysisLevelSecurity>
</PropertyGroup>
En la tabla siguiente se muestra el nombre de propiedad de cada categoría de regla.
| Nombre de propiedad | Categoría de regla |
|---|---|
<AnalysisLevelDesign> |
Reglas de diseño |
<AnalysisLevelDocumentation> |
Reglas de documentación |
<AnalysisLevelGlobalization> |
Reglas de globalización |
<AnalysisLevelInteroperability> |
Reglas de portabilidad e interoperabilidad |
<AnalysisLevelMaintainability> |
Reglas de mantenimiento |
<AnalysisLevelNaming> |
Reglas de nomenclatura |
<AnalysisLevelPerformance> |
Reglas de rendimiento |
<AnalysisLevelSingleFile> |
Reglas de aplicación de archivo único |
<AnalysisLevelReliability> |
Reglas de confiabilidad |
<AnalysisLevelSecurity> |
Reglas de seguridad |
<AnalysisLevelStyle> |
Todas las reglas de estilo de código (IDEXXXX) |
<AnalysisLevelUsage> |
Reglas de uso |
AnalysisMode
El SDK de .NET se incluye con todas las reglas de calidad de código "CA". De forma predeterminada, solo se habilitan las reglas some como advertencias de compilación en cada versión de .NET. La propiedad le permite personalizar el conjunto de reglas que está habilitado de manera predeterminada. Puede cambiar a un modo de análisis más agresivo en el que puede rechazar las reglas individualmente o a un modo de análisis más conservador en el que puede optar por reglas específicas. Por ejemplo, si quiere habilitar todas las reglas de forma predeterminada como advertencias de compilación, establezca el valor en .
<PropertyGroup>
<AnalysisMode>All</AnalysisMode>
</PropertyGroup>
En la siguiente tabla se muestran los valores de opción disponibles. Se muestran en orden creciente del número de reglas que habilitan.
| Value | Description |
|---|---|
None |
Todas las reglas están deshabilitadas. Puede incluir de forma selectiva reglas individuales para habilitarlas. |
Default |
Modo predeterminado, donde ciertas reglas están habilitadas como advertencias de compilación, ciertas reglas están habilitadas como sugerencias de IDE de Visual Studio y el resto están deshabilitados. |
Minimum |
Modo más agresivo que el modo . Algunas sugerencias que se recomiendan encarecidamente para el cumplimiento de la compilación se habilitan como advertencias de compilación. Para ver qué reglas incluye, inspeccione el %ProgramFiles%/do tnet/sdk/[version]/Sdks/Microsoft.NET. Sdk/analyzers/build/config/analysislevel_[level]_minimum.globalconfig archivo. (Para .NET 7 y versiones anteriores, la extensión de archivo es .editorconfig). |
Recommended |
Modo más agresivo que el modo , donde se habilitan más reglas como advertencias de compilación. Para ver qué reglas incluye, inspeccione el %ProgramFiles%/do tnet/sdk/[version]/Sdks/Microsoft.NET. Sdk/analyzers/build/config/analysislevel_[level]_recommended.globalconfig archivo. (Para .NET 7 y versiones anteriores, la extensión de archivo es .editorconfig). |
All |
Todas las reglas están habilitadas como advertencias de compilación. Puede excluir de forma selectiva reglas individuales para deshabilitarlas. * Las reglas siguientes no se habilitan al establecer en o establecer en : CA1017, CA1045, CA1005, CA1014, CA1060, CA1021 y las reglas del analizador de métricas de código (CA1501, CA1502, CA1505, CA1506 y CA1509). Estas reglas heredadas podrían quedar en desuso en versiones futuras. Sin embargo, todavía es posible habilitarlas individualmente mediante una entrada . |
Note
- Si establece EnforceCodeStyleInBuilden , esta propiedad afecta a las reglas de estilo de código (IDEXXXX) (además de las reglas de calidad de código).
- Si usa un valor compuesto para AnalysisLevel (por ejemplo, ), puede omitir esta propiedad por completo. Sin embargo, si especifica ambas propiedades, tiene prioridad sobre .
CategoríaAnalysisMode
Esta propiedad es igual que AnalysisMode, salvo que solo se aplica a una categoría de reglas de análisis de código específica. Esta propiedad le permite habilitar o deshabilitar las reglas en un nivel distinto al de las otras categorías de reglas. Si omite esta propiedad para una categoría de reglas concreta, su valor predeterminado es AnalysisMode. Los valores disponibles son los mismos que para AnalysisMode.
<PropertyGroup>
<AnalysisModeSecurity>All</AnalysisModeSecurity>
</PropertyGroup>
En la tabla siguiente se muestra el nombre de propiedad de cada categoría de regla.
| Nombre de propiedad | Categoría de regla |
|---|---|
<AnalysisModeDesign> |
Reglas de diseño |
<AnalysisModeDocumentation> |
Reglas de documentación |
<AnalysisModeGlobalization> |
Reglas de globalización |
<AnalysisModeInteroperability> |
Reglas de portabilidad e interoperabilidad |
<AnalysisModeMaintainability> |
Reglas de mantenimiento |
<AnalysisModeNaming> |
Reglas de nomenclatura |
<AnalysisModePerformance> |
Reglas de rendimiento |
<AnalysisModeSingleFile> |
Reglas de aplicación de archivo único |
<AnalysisModeReliability> |
Reglas de confiabilidad |
<AnalysisModeSecurity> |
Reglas de seguridad |
<AnalysisModeStyle> |
Todas las reglas de estilo de código (IDEXXXX) |
<AnalysisModeUsage> |
Reglas de uso |
CodeAnalysisTreatWarningsAsErrors
La propiedad le permite configurar si las advertencias de análisis de calidad del código (CAxxxx) se deben tratar como advertencias e interrumpir la compilación. Si usa la marca -warnaserror al compilar los proyectos, .NET análisis de calidad de código también se tratan como errores. Si no quiere que las advertencias de análisis de calidad del código se traten como errores, puede establecer la propiedad de MSBuild en en el archivo del proyecto.
<PropertyGroup>
<CodeAnalysisTreatWarningsAsErrors>false</CodeAnalysisTreatWarningsAsErrors>
</PropertyGroup>
EnableNETAnalyzers
.NET análisis de calidad de código está habilitado, de forma predeterminada, para proyectos que tienen como destino .NET 5 o una versión posterior. Si está desarrollando con el SDK de .NET 5+, puede habilitar .NET análisis de código para proyectos de estilo SDK destinados a versiones anteriores de .NET estableciendo la propiedad EnableNETAnalyzers en true. Para deshabilitar el análisis de código en cualquier proyecto, establezca esta propiedad en .
<PropertyGroup>
<EnableNETAnalyzers>true</EnableNETAnalyzers>
</PropertyGroup>
Note
Esta propiedad se aplica específicamente a los analizadores integrados del SDK de .NET 5+. No se debe usar cuando se instala un paquete NuGet de análisis de código.
EnforceCodeStyleInBuild
.NET análisis de estilo de código está deshabilitado, de forma predeterminada, en la compilación de todos los proyectos de .NET. Puede habilitar el análisis de estilo de código para proyectos de .NET estableciendo la propiedad EnforceCodeStyleInBuild en true.
<PropertyGroup>
<EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>
</PropertyGroup>
Todas las reglas de estilo del código configuradas como advertencias o errores se ejecutarán en la compilación y notificarán infracciones.
_SkipUpgradeNetAnalyzersNuGetWarning
La propiedad _SkipUpgradeNetAnalyzersNuGetWarning le permite configurar si recibe una advertencia si usa analizadores de código de un paquete NuGet obsoleto en comparación con los analizadores de código en el SDK de .NET más reciente. La advertencia es similar a la siguiente:
El SDK de .NET tiene analizadores más recientes con la versión "6.0.0" que la versión "5.0.3" del paquete "Microsoft.CodeAnalysis.NetAnalyzers". Actualice o quite esta referencia de paquete.
Para quitar esta advertencia y seguir usando la versión de analizadores de código en el paquete NuGet, establezca en en el archivo del proyecto.
<PropertyGroup>
<_SkipUpgradeNetAnalyzersNuGetWarning>true</_SkipUpgradeNetAnalyzersNuGetWarning>
</PropertyGroup>
Propiedades de configuración del entorno de ejecución
Puede configurar algunos comportamientos del entorno de ejecución si especifica las propiedades de MSBuild en el archivo de proyecto de la aplicación. Para obtener información sobre otros métodos de configuración del comportamiento del entorno de ejecución, consulte Configuración del entorno de ejecución.
- AutoreleasePoolSupport
- ConcurrentGarbageCollection
- InvariantGlobalization
- PredefinedCulturesOnly
- RetainVMGarbageCollection
- ServerGarbageCollection
- ThreadPoolMaxThreads
- ThreadPoolMinThreads
- TieredCompilation
- TieredCompilationQuickJit
- TieredCompilationQuickJitForLoops
- TieredPGO
- UseWindowsThreadPool
AutoreleasePoolSupport
La propiedad configura si cada subproceso administrado recibe un elemento NSAutoreleasePool implícito cuando se ejecuta en una plataforma macOS compatible. Para obtener más información, consulte para subprocesos administrados.
<PropertyGroup>
<AutoreleasePoolSupport>true</AutoreleasePoolSupport>
</PropertyGroup>
ConcurrentGarbageCollection
La propiedad configura si está habilitada la recolección de elementos no utilizados en segundo plano (simultánea). Establezca el valor en para deshabilitar la recolección de elementos no utilizados en segundo plano. Para obtener más información, vea Recolección de elementos no utilizados en segundo plano.
<PropertyGroup>
<ConcurrentGarbageCollection>false</ConcurrentGarbageCollection>
</PropertyGroup>
InvariantGlobalization
La propiedad configura si la aplicación se ejecuta en modo invariable de globalización, lo que significa que no tiene acceso a datos específicos de la referencia cultural. Establezca el valor en para ejecutar en el modo invariable de globalización. Para obtener más información, consulte Modo invariable.
<PropertyGroup>
<InvariantGlobalization>true</InvariantGlobalization>
</PropertyGroup>
PredefinedCulturesOnly
En .NET 6 y versiones posteriores, la propiedad PredefinedCulturesOnly configura si las aplicaciones pueden crear referencias culturales distintas de la referencia cultural invariable cuando modo invariable está habilitado. El valor predeterminado es . Establezca el valor en para permitir la creación de cualquier nueva referencia cultural en el modo invariable de globalización.
<PropertyGroup>
<PredefinedCulturesOnly>false</PredefinedCulturesOnly>
</PropertyGroup>
Para obtener más información, vea Creación de referencia cultural y asignación de casos en el modo invariable de globalización.
RetainVMGarbageCollection
La propiedad configura el recolector de elementos no utilizados para colocar los segmentos de memoria eliminados en una lista en espera para su uso futuro o para liberarlos. Al establecer el valor en , se indica al recolector de elementos no utilizados que coloque los segmentos en una lista en espera. Para obtener más información, vea Retain VM (Conservar VM).
<PropertyGroup>
<RetainVMGarbageCollection>true</RetainVMGarbageCollection>
</PropertyGroup>
ServerGarbageCollection
La propiedad configura si la aplicación usa la recolección de elementos no utilizados de estación de trabajo o la de servidor. Establezca el valor en para usar la recolección de elementos no utilizados de servidor. Para obtener más información, vea Estación de trabajo frente a servidor.
<PropertyGroup>
<ServerGarbageCollection>true</ServerGarbageCollection>
</PropertyGroup>
ThreadPoolMaxThreads
La propiedad configura el número máximo de subprocesos para el grupo de subprocesos de trabajo. Para obtener más información, consulte Máximo de subprocesos.
<PropertyGroup>
<ThreadPoolMaxThreads>20</ThreadPoolMaxThreads>
</PropertyGroup>
ThreadPoolMinThreads
La propiedad configura el número mínimo de subprocesos para el grupo de subprocesos de trabajo. Para obtener más información, consulte Mínimo de subprocesos.
<PropertyGroup>
<ThreadPoolMinThreads>4</ThreadPoolMinThreads>
</PropertyGroup>
TieredCompilation
La propiedad configura si el compilador Just-In-Time (JIT) usa la compilación en niveles. Establezca el valor en para deshabilitar la compilación en niveles. Para obtener más información, vea Compilación en niveles.
<PropertyGroup>
<TieredCompilation>false</TieredCompilation>
</PropertyGroup>
TieredCompilationQuickJit
La propiedad configura si el compilador JIT usa JIT rápido. Establezca el valor en para deshabilitar JIT rápido. Para obtener más información, vea JIT rápido.
<PropertyGroup>
<TieredCompilationQuickJit>false</TieredCompilationQuickJit>
</PropertyGroup>
TieredCompilationQuickJitForLoops
La propiedad configura si el compilador JIT usa JIT rápido en métodos que contienen bucles. Establezca el valor en para habilitar JIT rápido en métodos que contienen bucles. Para obtener más información, vea JIT rápido para bucles.
<PropertyGroup>
<TieredCompilationQuickJitForLoops>true</TieredCompilationQuickJitForLoops>
</PropertyGroup>
TieredPGO
La propiedad controla si está habilitada la optimización guiada por perfiles (PGO) dinámica o en capas. Establezca el valor en para habilitar PGO en capas. Para más información, vea Optimización guiada por perfiles.
<PropertyGroup>
<TieredPGO>true</TieredPGO>
</PropertyGroup>
UseWindowsThreadPool
La propiedad UseWindowsThreadPool configura si la administración de subprocesos del grupo de subprocesos se delega al grupo de subprocesos de Windows (solo Windows). El valor predeterminado es false, en cuyo caso se usa el grupo de subprocesos de .NET. Para obtener más información, consulte Windows grupo de subprocesos.
<PropertyGroup>
<UseWindowsThreadPool>true</UseWindowsThreadPool>
</PropertyGroup>
Propiedades relacionadas con referencias
En esta sección se documentan las siguientes propiedades de MSBuild:
- AssetTargetFallback
- DisableImplicitFrameworkReferences
- DisableTransitiveFrameworkReferenceDownloads
- DisableTransitiveProjectReferences
- ManagePackageVersionsCentrally
- Propiedades relacionadas con la restauración
- UseMauiEssentials
- ValidateExecutableReferencesMatchSelfContained
AssetTargetFallback
La propiedad permite especificar versiones de la plataforma compatibles adicionales para las referencias de proyectos y los paquetes NuGet. Por ejemplo, si se especifica una dependencia de paquete mediante pero ese paquete no contiene recursos compatibles con el valor del proyecto, entra en juego la propiedad . La compatibilidad del paquete al que se hace referencia se vuelve a comprobar con cada plataforma de destino que se especifica en . Esta propiedad reemplaza la propiedad en desuso .
Puede establecer la propiedad en una o varias versiones de plataforma de destino.
<PropertyGroup>
<AssetTargetFallback>net461</AssetTargetFallback>
</PropertyGroup>
DisableImplicitFrameworkReferences
La propiedad DisableImplicitFrameworkReferences controla los elementos FrameworkReference implícitos al dirigirse a .NET Core 3.0 y versiones posteriores. Al establecer como destino .NET Core 2.1 o .NET Standard 2.0 y versiones anteriores, controla los elementos implícitos PackageReference a los paquetes de un metapaquete. (Un metapaquete es un paquete basado en marcos que consta solo de dependencias en otros paquetes). Esta propiedad también controla referencias implícitas, como System y System.Core al dirigirse a .NET Framework.
Establezca esta propiedad en para deshabilitar los elementos implícitos FrameworkReference o PackageReference. Si establece esta propiedad en , puede agregar referencias explícitas solo a las plataformas o paquetes que necesite.
<PropertyGroup>
<DisableImplicitFrameworkReferences>true</DisableImplicitFrameworkReferences>
</PropertyGroup>
DisableTransitiveFrameworkReferenceDownloads
Establezca la propiedad en para evitar la descarga de paquetes de destino y del entorno de ejecución adicionales a los que el proyecto no hace referencia directamente.
<PropertyGroup>
<DisableTransitiveFrameworkReferenceDownloads>true</DisableTransitiveFrameworkReferenceDownloads>
</PropertyGroup>
DisableTransitiveProjectReferences
La propiedad controla las referencias implícitas del proyecto. Establezca esta propiedad en para deshabilitar elementos de implícitos. Deshabilitar las referencias implícitas del proyecto da como resultado un comportamiento no transitivo similar al sistema de proyectos heredado.
Cuando esta propiedad es , tiene un efecto similar al de establecer en todas las dependencias del proyecto dependiente.
Si establece esta propiedad en , puede agregar referencias explícitas solo a los proyectos que necesite.
<PropertyGroup>
<DisableTransitiveProjectReferences>true</DisableTransitiveProjectReferences>
</PropertyGroup>
ManagePackageVersionsCentrally
La propiedad ManagePackageVersionsCentrally se introdujo en .NET 7. Al establecerla en en un archivo Directory.Packages.props en la raíz del repositorio, puede administrar dependencias comunes en los proyectos desde una ubicación. Agregue versiones para las dependencias comunes del paquete mediante elementos en el archivo Directory.Packages.props. A continuación, en los archivos de proyecto individuales, puede omitir atributos de cualquier elemento que haga referencia a paquetes administrados centralmente.
Archivo Directory.Packages.props de ejemplo:
<PropertyGroup>
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
</PropertyGroup>
...
<ItemGroup>
<PackageVersion Include="Microsoft.Extensions.Configuration" Version="9.0.0" />
</ItemGroup>
Archivo del proyecto individual:
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Configuration" />
</ItemGroup>
Para obtener más información, vea Administración central de paquetes (CPM).
Propiedades relacionadas con la restauración
La restauración de un paquete al que se hace referencia instala todas sus dependencias directas y todas las dependencias de esas dependencias. Puede personalizar la restauración de paquetes especificando propiedades como y . Para más información sobre estas y otras propiedades, vea Destino de restore.
<PropertyGroup>
<RestoreIgnoreFailedSource>true</RestoreIgnoreFailedSource>
</PropertyGroup>
UseMauiEssentials
Establezca la propiedad en para declarar una referencia explícita a un proyecto o paquete que depende de MAUI Essentials. Esta configuración garantiza que el proyecto extraiga la referencia de marco conocida correcta para MAUI Essentials. Si el proyecto hace referencia a un proyecto que usa MAUI Essentials, pero no establece esta propiedad en , es posible que encuentre la advertencia de compilación .
<PropertyGroup>
<UseMauiEssentials>true</UseMauiEssentials>
</PropertyGroup>
ValidateExecutableReferencesMatchSelfContained
La propiedad se puede usar para deshabilitar los errores relacionados con las referencias de proyecto ejecutable. Si .NET detecta que un proyecto ejecutable independiente hace referencia a un proyecto ejecutable dependiente del marco, o viceversa, genera errores NETSDK1150 y NETSDK1151, respectivamente. Para evitar estos errores cuando la referencia es intencionada, establezca la propiedad en .
<PropertyGroup>
<ValidateExecutableReferencesMatchSelfContained>false</ValidateExecutableReferencesMatchSelfContained>
</PropertyGroup>
WindowsSdkPackageVersion
La propiedad />
<PropertyGroup>
<WindowsSdkPackageVersion>10.0.19041.18</WindowsSdkPackageVersion>
</PropertyGroup>
Note
No se recomienda invalidar la versión del SDK de Windows, ya que los paquetes de destino del SDK de Windows se incluyen con el SDK de .NET 5+. En su lugar, para hacer referencia al paquete del SDK de Windows más reciente, actualice la versión del SDK de .NET. Esta propiedad solo se debe usar en ocasiones excepcionales, como el uso de paquetes de versión preliminar o la necesidad de invalidar la versión de C#/WinRT.
Propiedades relacionadas con la ejecución
Las siguientes propiedades se usan para iniciar una aplicación con el comando :
- RunArguments
- RunWorkingDirectory
RunArguments
La propiedad define los argumentos que se pasan a la aplicación cuando se ejecuta.
<PropertyGroup>
<RunArguments>-mode dryrun</RunArguments>
</PropertyGroup>
Tip
Puede especificar los argumentos adicionales que se pasarán a la aplicación mediante la opción para .
RunWorkingDirectory
La propiedad define el directorio de trabajo en el que se iniciará el proceso. Puede ser una ruta de acceso absoluta o relativa al directorio del proyecto. Si no se especifica un directorio, se usa como directorio de trabajo.
<PropertyGroup>
<RunWorkingDirectory>c:\temp</RunWorkingDirectory>
</PropertyGroup>
Propiedades relacionadas con el SDK
En esta sección se documentan las siguientes propiedades de MSBuild:
- SdkAnalysisLevel
SdkAnalysisLevel
Introducido en .NET 9, la propiedad SdkAnalysisLevel se puede usar para configurar cómo está strict las herramientas del SDK. Le ayuda a administrar los niveles de advertencia del SDK en situaciones en las que es posible que no pueda anclar SDK a través de global.json u otros medios. Puede usar esta propiedad para indicar a un SDK más reciente que se comporte como si fuera un SDK anterior, con respecto a una herramienta o característica específica, sin tener que instalar el SDK anterior.
Los valores permitidos de esta propiedad son bandas de características del SDK, por ejemplo, 8.0.100 y 8.0.400. El valor predeterminado es la banda de características del SDK del SDK en ejecución. Por ejemplo, para SDK 9.0.102, el valor que se va a usar es 9.0.100. (Para obtener información sobre cómo se versiona el SDK de .NET, consulte How .NET is versioned).)
<PropertyGroup>
<SdkAnalysisLevel>8.0.400</SdkAnalysisLevel>
</PropertyGroup>
Para obtener más información, consulte SDK Analysis Level Property and Usage (Propiedad y uso del nivel de análisis del SDK).
En la tabla siguiente se resumen los diagnósticos y comportamientos afectados por .
| SDKAnalysisLevel | Description | Comportamiento actualizado |
|---|---|---|
| 9.0.100 | Restauración del diagnóstico de orígenes HTTP | Emite el error NU1302 en lugar de la advertencia NU1803 . |
| 10.0.100 | Eliminación de paquetes "Restaurar" | PrunePackageReference está habilitado de forma predeterminada para proyectos que tienen como destino .NET 8+ o .NET Standard 2.0+. |
| 10.0.100 | Resolución "Restaurar" con archivos de bloqueo | Usa la resolución de gráficos de dependencias .NET 9 en lugar de la resolución heredada de grafos de dependencias (.NET 8 SDK y versiones anteriores). |
| 10.0.100 | Comportamiento de "Restauración" para PackageReference sin una versión | Emite el error NU1015 en lugar de la advertencia NU1603 . |
Note
El comportamiento habilitado por el valor agota (expira) después de tres versiones principales. Por ejemplo, la versión 11.0.100 solo respeta los valores hasta 8.0.100. En la versión 12.0.100, las características que podrían deshabilitarse en versiones anteriores estableciendo un valor de 8.0.100 ya no se deshabilitarían.
Propiedades relacionadas con Microsoft.Testing.Platform
En esta sección se documentan las siguientes propiedades de MSBuild:
- IsTestingPlatformApplication
- Enable[NugetPackageNameWithoutDots]
- EnableAspireTesting
- EnableMSTestRunner
- EnableNUnitRunner
- EnablePlaywright
- GenerateTestingPlatformConfigurationFile
- GenerateTestingPlatformEntryPoint
- TestingExtensionsProfile
- TestingPlatformCaptureOutput
- TestingPlatformCommandLineArguments
- TestingPlatformDotnetTestSupport
- TestingPlatformShowTestsFailure
- UseMicrosoftTestingPlatformRunner
IsTestingPlatformApplication
Cuando el proyecto hace referencia al paquete Microsoft.Testing.Platform.MSBuild , el valor en (que también es el valor predeterminado si no se especifica) hace lo siguiente:
- Genera el punto de entrada al proyecto de prueba.
- Genera el archivo de configuración.
- Detecta las extensiones.
Al establecer la propiedad en , se deshabilita la dependencia transitiva en el paquete. Una dependencia transitiva es cuando un proyecto que hace referencia a otro proyecto que hace referencia a un paquete determinado se comporta como si hace referencia al paquete. Normalmente, esta propiedad se establece en en un proyecto que no es de prueba que hace referencia a un proyecto de prueba. Para obtener más información, consulte el error CS8892.
Si el proyecto de prueba hace referencia a MSTest, NUnit o xUnit, esta propiedad se establece en el mismo valor que EnableMSTestRunner, EnableNUnitRunner o (para xUnit).
Enable[NugetPackageNameWithoutDots]
Use una propiedad con el patrón para habilitar o deshabilitar las extensiones Microsoft.Testing.Platform.
Por ejemplo, para habilitar la extensión de volcado de memoria (paquete NuGet Microsoft.Testing.Extensions.CrashDump), establezca en .
Para obtener más información, vea Habilitar o deshabilitar extensiones.
EnableAspireTesting
Al usar el SDK del proyecto MSTest, puede usar la propiedad para incluir todas las dependencias y directivas predeterminadas que necesita para realizar pruebas con y . Esta propiedad está disponible en MSTest 3.4 y versiones posteriores.
Para obtener más información, consulte Prueba con Aspire.
EnablePlaywright
Al usar el SDK del proyecto MSTest, puede usar la propiedad para incluir todas las dependencias y directivas predeterminadas que necesita para realizar pruebas con y . Esta propiedad está disponible en MSTest 3.4 y versiones posteriores.
Para obtener más información, consulte Playwright.
EnableMSTestRunner
La propiedad habilita o deshabilita el uso de Microsoft.Testing.Platform (MTP), una alternativa ligera y portátil a VSTest. Esta propiedad está disponible en MSTest 3.2 y versiones posteriores.
Note
Si el proyecto especifica el SDK de MSTest, no es necesario establecer esta propiedad. Se establece automáticamente.
EnableNUnitRunner
La propiedad habilita o deshabilita el uso del ejecutor de NUnit. El ejecutor NUnit es una alternativa ligera y portátil a VSTest. Esta propiedad está disponible en NUnit3TestAdapter en la versión 5.0 y posteriores.
UseMicrosoftTestingPlatformRunner
La propiedad habilita o deshabilita el uso del ejecutor Microsoft.Testing.Platform en proyectos de prueba xUnit.v3 .
GenerateTestingPlatformEntryPoint
Al establecer la propiedad en se deshabilita la generación automática del punto de entrada del programa en proyectos de prueba que usan Microsoft.Testing.Platform. Es posible que desee establecer esta propiedad en cuando defina manualmente un punto de entrada o cuando haga referencia a un proyecto de prueba desde un archivo ejecutable que también tenga un punto de entrada.
Para obtener más información, consulte el error CS8892.
Para controlar la generación del punto de entrada en un proyecto de VSTest, use la propiedad .
GenerateTestingPlatformConfigurationFile
La propiedad solo está disponible cuando IsTestingPlatformApplication es . Se usa para permitir la copia y el cambio de nombre del archivo de configuración en la carpeta de salida.
TestingPlatformCaptureOutput
La propiedad controla si todas las salidas de la consola que escribe un ejecutable de prueba se capturan y ocultan al usuario cuando se usan para ejecutar pruebas. De forma predeterminada, la salida de la consola está oculta. Esta salida incluye el banner, la información de versión y la información de prueba con formato. Establezca esta propiedad en para mostrar esta información junto con la salida de MSBuild.
Para obtener más información, consulte Mostrar la salida completa de la plataforma.
TestingPlatformCommandLineArguments
La propiedad permite especificar argumentos de línea de comandos para la aplicación de prueba cuando se usan para ejecutar pruebas. En el siguiente fragmento de código de archivo de proyecto se muestra un ejemplo.
<PropertyGroup>
...
<TestingPlatformCommandLineArguments>--minimum-expected-tests 10</TestingPlatformCommandLineArguments>
</PropertyGroup>
TestingPlatformDotnetTestSupport
La propiedad habilita las pruebas de aplicaciones Microsoft.Testing.Platform cuando se usa el modo VSTest de .
Note
No llame a en una solución que tenga proyectos de VSTest y Microsoft.Testing.Platform, ya que ese escenario no se admite.
Para obtener más información, vea Probar con "dotnet test".
TestingPlatformShowTestsFailure
La propiedad permite controlar si se notifica un único error o todos los errores de una prueba con error cuando se usan para ejecutar pruebas. De forma predeterminada, se resumen los errores de prueba en un archivo .log y se notifica un único error por proyecto de prueba a MSBuild. Para mostrar errores por prueba con errores, establezca esta propiedad en en el archivo del proyecto.
TestingExtensionsProfile
Al usar el SDK del proyecto MSTest, la propiedad le permite seleccionar un perfil que se va a usar. En la tabla siguiente se muestran los valores permitidos.
| Value | Description |
|---|---|
Default |
Habilita las extensiones recomendadas para esta versión de MSTest.SDK. |
None |
No hay extensiones habilitadas. |
AllMicrosoft |
Habilite todas las extensiones enviadas por Microsoft (incluidas las extensiones con una licencia restrictiva). |
Para obtener más información, consulte perfil Microsoft.Testing.Platform.
Propiedades relacionadas con VSTest
En esta sección se documentan las siguientes propiedades de MSBuild:
- IsTestProject
- UseVSTest
IsTestProject
La propiedad />
Note
Si el proyecto especifica la MSTest SDK, no es necesario establecer esta propiedad, ya que MSTest.Sdk hace referencia a Microsoft.NET. Paquete NuGet Test.Sdk.
UseVSTest
Establezca la propiedad en para cambiar de Microsoft.Testing.Platform al ejecutor de vsTest de al usar el SDK de proyectos de MSTest de .
Propiedades relacionadas con MSTest
En esta sección se documentan las siguientes propiedades de MSBuild:
- MSTestAnalysisMode
MSTestAnalysisMode
Esta propiedad decide qué analizadores están habilitados en qué gravedad. Para obtener más información, consulte análisis de código msTest.
Propiedades relacionadas con el hospedaje
En esta sección se documentan las siguientes propiedades de MSBuild:
- AppHostDotNetSearch
- AppHostRelativeDotNet
- EnableComHosting
- EnableDynamicLoading
AppHostDotNetSearch
La propiedad AppHostDotNetSearch configura cómo el archivo ejecutable nativo producido para una aplicación buscará una instalación de .NET. Esta propiedad solo afecta al ejecutable generado en la publicación, no a la compilación.
<PropertyGroup>
<AppHostDotNetSearch>Global</AppHostDotNetSearch>
</PropertyGroup>
En la tabla siguiente se enumeran los valores válidos. Puede especificar varios valores, separados por punto y coma.
| Value | Meaning |
|---|---|
AppLocal |
Carpeta del ejecutable de la aplicación |
AppRelative |
Ruta de acceso relativa al archivo ejecutable de la aplicación tal y como se especifica en AppHostRelativeDotNet |
EnvironmentVariable |
Valor de las variables de entorno |
Global |
Ubicaciones de instalación global registradas y predeterminadas |
Esta propiedad se introdujo en .NET 9.
AppHostRelativeDotNet
La propiedad AppHostRelativeDotNet permite especificar una ruta de acceso relativa para que el ejecutable de la aplicación busque la instalación de .NET cuando se configurado para hacerlo. Establecer la propiedad implica que es . Esta propiedad solo afecta al ejecutable generado en la publicación, no a la compilación.
<PropertyGroup>
<AppHostRelativeDotNet>./relative/path/to/runtime</AppHostRelativeDotNet>
</PropertyGroup>
Esta propiedad se introdujo en .NET 9.
EnableComHosting
La propiedad indica que un ensamblado proporciona un servidor COM. Al establecer en también implica que EnableDynamicLoading es .
<PropertyGroup>
<EnableComHosting>True</EnableComHosting>
</PropertyGroup>
Para obtener más información, consulte Componentes de .NET De exposición a COM.
EnableDynamicLoading
La propiedad indica que un ensamblado es un componente cargado dinámicamente. El componente podría ser una biblioteca de COM o una biblioteca que no es de COM que se puede usar desde un host nativo o como complemento. Establecer esta propiedad en tiene los efectos siguientes:
- Se genera un archivo runtimeconfig.json.
- RollForward se establece en .
- Las referencias de NuGet se copian localmente.
<PropertyGroup>
<EnableDynamicLoading>true</EnableDynamicLoading>
</PropertyGroup>
Propiedades del archivo generado
Las siguientes propiedades se refieren al código de los archivos generados:
- DisableImplicitNamespaceImports
- ImplicitUsings
DisableImplicitNamespaceImports
La propiedad DisableImplicitNamespaceImports se puede usar para deshabilitar las importaciones implícitas de espacios de nombres en proyectos de Visual Basic que tienen como destino .NET 6 o una versión posterior. Los espacios de nombres implícitos son los espacios de nombres predeterminados que se importan globalmente en un proyecto de Visual Basic. Establezca esta propiedad en para deshabilitar las importaciones de espacios de nombres implícitos.
<PropertyGroup>
<DisableImplicitNamespaceImports>true</DisableImplicitNamespaceImports>
</PropertyGroup>
ImplicitUsings
La propiedad
<PropertyGroup>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
Note
Las plantillas de los nuevos proyectos de C# que tienen como destino .NET 6 o posterior tienen ImplicitUsings establecido en enable de forma predeterminada.
Para definir una directiva explícita, agregue un elemento Using.
Items
Los elementos de MSBuild son entradas al sistema de compilación. Los elementos se especifican de acuerdo con su tipo, que es el nombre del elemento. Por ejemplo, y son dos tipos de elementos comunes. El SDK de .NET pone a disposición de los siguientes tipos de elementos adicionales:
- AssemblyMetadata
- InternalsVisibleTo
- PackageReference
- TrimmerRootAssembly
- Using
Puede usar cualquiera de los atributos de elementos estándar, por ejemplo, y , en dichos elementos. Use para agregar un nuevo elemento; y , para modificar uno existente. Por ejemplo, Update se usa a menudo para modificar un elemento que el SDK de .NET ha agregado implícitamente.
AssemblyMetadata
El elemento especifica un atributo de ensamblado de par clave-valor. Los metadatos se convierten en la clave y los metadatos se convierten en el valor.
<ItemGroup>
<AssemblyMetadata Include="Serviceable" Value="True" />
</ItemGroup>
InternalsVisibleTo
El elemento genera un atributo de ensamblado para el ensamblado de confianza especificado.
<ItemGroup>
<InternalsVisibleTo Include="MyProject.Tests" />
</ItemGroup>
Si el ensamblado de confianza está firmado, puede especificar metadatos opcionales para especificar su clave pública completa. Si no especifica metadatos y está disponible, se usa esa clave. De lo contrario, no se agrega ninguna clave pública al atributo.
FrameworkReference
El elemento FrameworkReference define una referencia a un marco compartido de .NET.
El atributo especifica el identificador del marco.
El fragmento del archivo del proyecto del ejemplo siguiente hace referencia al marco compartido Microsoft.AspNetCore.App.
<ItemGroup>
<FrameworkReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>
PackageReference
El elemento define una referencia a un paquete NuGet.
El atributo especifica el identificador del paquete. El atributo especifica la versión o el intervalo de versiones. Para obtener más información sobre cómo especificar una versión mínima, una máxima, un intervalo o una coincidencia exacta, vea Intervalos de versiones.
El fragmento del archivo del proyecto del ejemplo siguiente hace referencia al paquete System.Runtime.
<ItemGroup>
<PackageReference Include="System.Runtime" Version="4.3.0" />
</ItemGroup>
También puede controlar los recursos de las dependencias mediante metadatos como .
<ItemGroup>
<PackageReference Include="Contoso.Utility.UsefulStuff" Version="3.6.0">
<PrivateAssets>all</PrivateAssets>
</PackageReference>
</ItemGroup>
Para obtener más información, vea Referencias de paquete en un archivo del proyecto.
TrimmerRootAssembly
El elemento permite excluir del recorte un ensamblado. El recorte es el proceso de quitar de una aplicación empaquetada las partes que no se han usado del tiempo de ejecución. En algunos casos, el recorte podría quitar de forma incorrecta las referencias necesarias.
El siguiente código XML excluye del recorte el ensamblado .
<ItemGroup>
<TrimmerRootAssembly Include="System.Security" />
</ItemGroup>
Para obtener más información, consulte Opciones de recorte.
Using
El elemento le permite incluir un espacio de nombres globalmente en todo el proyecto de C#, de modo que no tenga que agregar una directiva de para el espacio de nombres en la parte superior de los archivos de origen. Este elemento es similar al elemento Import que se puede usar para el mismo propósito en proyectos de Visual Basic. Esta propiedad está disponible a partir de .NET 6.
<ItemGroup>
<Using Include="My.Awesome.Namespace" />
</ItemGroup>
También puede usar el elemento para definir directivas y globales.
<ItemGroup>
<Using Include="My.Awesome.Namespace" Alias="Awesome" />
</ItemGroup>
Por ejemplo:
- emite
- emite
Para más información, consulte las directivas de alias y las directivas .
Metadatos de elementos
Además de los atributos de elemento estándar MSBuild, el SDK de .NET pone a disposición las siguientes etiquetas de metadatos de elemento:
- CopyToPublishDirectory
- LinkBase
CopyToPublishDirectory
Los metadatos de relativos a un elemento de MSBuild controlan cuándo se copia el elemento en el directorio de publicación. En la tabla siguiente se muestran los valores permitidos.
| Value | Description |
|---|---|
PreserveNewest |
Solo copia el elemento si ha cambiado en la ubicación de origen. |
IfDifferent |
Solo copia el elemento si ha cambiado en la ubicación de origen o de destino. Esta configuración es útil para situaciones en las que es necesario restablecer los cambios que se producen después de la publicación. |
Always |
Siempre copia el elemento. |
Never |
Nunca copia el elemento. |
Desde el punto de vista del rendimiento, es preferible porque permite una compilación incremental. Evite usar y use en su lugar, lo que evita escrituras de E/S sin ningún efecto.
<ItemGroup>
<None Update="appsettings.Development.json" CopyToOutputDirectory="PreserveNewest" CopyToPublishDirectory="PreserveNewest" />
</ItemGroup>
LinkBase
En el caso de un elemento situado fuera del directorio del proyecto y sus subdirectorios, el destino de publicación usa los metadatos de Link del elemento para determinar dónde se debe copiar este.
Link también determina cómo se muestran los elementos fuera del árbol del proyecto en la ventana Explorador de soluciones de Visual Studio.
Si no se especifica para un elemento situado fuera del cono del proyecto, este tiene como valor predeterminado. permite especificar una carpeta base razonable para los elementos situados fuera del cono del proyecto. La jerarquía de carpetas de la carpeta base se conserva por medio de . Si no se especifica , se omite de la ruta a .
<ItemGroup>
<Content Include="..\Extras\**\*.cs" LinkBase="Shared"/>
</ItemGroup>
En la imagen siguiente se muestra cómo se muestra un archivo que se incluye a través del elemento anterior Include glob en Explorador de soluciones.
Consulte también
- Referencia del esquema de MSBuild
- Propiedades comunes de MSBuild
- Propiedades de MSBuild para pack de NuGet
- Propiedades de MSBuild para restore de NuGet
- Personalización de una compilación