Comparteix a través de


Compatibilidad con varias plataformas de .NET en el archivo de proyecto

Al crear un proyecto por primera vez, se recomienda crear una biblioteca de clases de .NET Standard, ya que proporciona compatibilidad con la gama más amplia de proyectos de consumo. Mediante .NET Standard, se agrega compatibilidad multiplataforma a una biblioteca de .NET de forma predeterminada. Sin embargo, en algunos escenarios, es posible que también tenga que incluir código destinado a un marco determinado. En este artículo se muestra cómo hacerlo para proyectos de estilo SDK .

En el caso de los proyectos de estilo SDK, puede configurar la compatibilidad con varios marcos de destino (TFM) en el archivo del proyecto y, a continuación, usar dotnet pack o msbuild /t:pack crear el paquete.

Creación de un proyecto que admita varias plataformas de .NET

  1. Cree una biblioteca de clases de .NET Standard en Visual Studio o use dotnet new classlib.

    Se recomienda crear una biblioteca de clases de .NET Standard para obtener la mejor compatibilidad.

  2. Edite el archivo .csproj para admitir las plataformas de destino. Por ejemplo, cambiar

    <TargetFramework>netstandard2.0</TargetFramework>

    to:

    <TargetFrameworks>netstandard2.0;net45</TargetFrameworks>

    Asegúrese de cambiar el elemento XML cambiado de singular a plural (agregue los "s" a las etiquetas abiertas y cerradas).

  3. Si tiene algún código que solo funcione en un TFM, puede usar #if NET45 o #if NETSTANDARD2_0 para separar el código dependiente del TFM. (Para obtener más información, vea How to multitarget).) Por ejemplo, puede usar el código siguiente:

    public string Platform {
       get {
    #if NET45
          return ".NET Framework"
    #elif NETSTANDARD2_0
          return ".NET Standard"
    #else
    #error This code block does not match csproj TargetFrameworks list
    #endif
       }
    }
    
  4. Agregue los metadatos de NuGet que desee a .csproj como propiedades de MSBuild.

    Para obtener la lista de metadatos de paquete disponibles y los nombres de propiedad de MSBuild, consulte destino de paquete. Consulte también Control de los recursos de dependencia.

    Si desea separar las propiedades relacionadas con la compilación de los metadatos de NuGet, puede usar otra PropertyGroupo colocar las propiedades de NuGet en otro archivo y usar la directiva de Import MSBuild para incluirla. Directory.Build.Props y Directory.Build.Targets también se admiten a partir de MSBuild 15.0.

  5. Ahora, use dotnet pack y el .nupkg resultante tenga como destino .NET Standard 2.0 y .NET Framework 4.5.

Este es el archivo .csproj que se genera mediante los pasos anteriores y el SDK de .NET Core 2.2.

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFrameworks>netstandard2.0;net45</TargetFrameworks>
    <Description>Sample project that targets multiple TFMs</Description>
  </PropertyGroup>

</Project>

Multi-targeting con marcos duplicados

A partir de NuGet 7.6 / SDK de .NET 10.0.300, puede usar varios TargetFrameworks valores que se resuelven en el mismo marco subyacente. Esto permite escenarios como compilar para varios entornos de ejecución o tener como destino varias versiones de una aplicación host desde un único proyecto.

Para obtener más información sobre cómo funciona con la restauración y el paquete, consulte Selección de varios marcos de trabajo.

Consulte también