Estoy buscando usar objetivos múltiples para algunos proyectos comunes que necesitan compilar tanto en .NET Standard 2.0 (para proyectos heredados de .NET Framework 4.8) como en .NET 6.0 (para nuevos proyectos). Algunas de las dependencias de estos proyectos comunes deben referenciarse condicionalmente. Por ejemplo, el destino de .NET Standard 2.0 debe permanecer en Entity Framework Core 3.1, mientras que el destino de .NET 6.0 puede usar Entity Framework Core 6.0.
<PropertyGroup> <TargetFrameworks>netstandard2.0;net6.0</TargetFrameworks> </PropertyGroup> <ItemGroup> <PackageReference Include="morelinq" Version="3.3.2" /> <PackageReference Include="Newtonsoft.Json" Version="13.0.1" /> </ItemGroup> <ItemGroup Condition=" '$(TargetFramework)' == 'netstandard2.0' "> <PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.18" /> <PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="3.1.18" /> <PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="3.1.18" /> <PackageReference Include="Microsoft.Extensions.Options.DataAnnotations" Version="3.1.18" /> </ItemGroup> <ItemGroup Condition=" '$(TargetFramework)' == 'net6.0' "> <PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.0" /> <PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="6.0.0" /> <PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="6.0.0" /> <PackageReference Include="Microsoft.Extensions.Options.DataAnnotations" Version="6.0.0" /> </ItemGroup>Sin embargo, tengo problemas con la función "Administrar paquetes de NuGet..." de Visual Studio para actualizar paquetes, ya que no parece ser compatible con los marcos de trabajo de destino. Esto afecta a todas las versiones de Visual Studio, incluida la 2022:
¿Existe una forma adecuada de manejar las actualizaciones de paquetes en proyectos de objetivos múltiples?
La mejor solución que he encontrado hasta ahora es usar una búsqueda y reemplazo en toda la solución para cambiar temporalmente <TargetFrameworks> en los archivos csproj a objetivos únicos al actualizar los paquetes de NuGet.
Por ejemplo, primero podría reemplazar todas las instancias de <TargetFrameworks>netstandard2.0;net6.0</TargetFrameworks> por <TargetFrameworks>net6.0</TargetFrameworks> . Con ese cambio, cualquier referencia de paquete en los <ItemGroup Condition=" '$(TargetFramework)' == 'netstandard2.0' "> se ignora, y la ventana "Administrar paquetes NuGet..." de Visual Studio le permitiría actualizar solo el Referencias de paquetes NuGet comunes y específicas de .NET 6.0. (Es posible que deba volver a cargar todos los proyectos después de la sustitución, por ejemplo, reiniciando Visual Studio).
A continuación, reemplazaría todas las apariciones a <TargetFrameworks>netstandard2.0</TargetFrameworks> y actualizaría las referencias del paquete NuGet específico de .NET Standard 2.0. Finalmente, realizaría otra búsqueda y reemplazo para volver a <TargetFrameworks>netstandard2.0;net6.0</TargetFrameworks> .
Mantuve la forma plural de <TargetFrameworks> en todo momento para distinguirlo de los proyectos genuinamente de un solo objetivo que originalmente tenían <TargetFramework> . Es posible que desee utilizar otro medio para realizar un seguimiento de estos cambios temporales de buscar y reemplazar, como agregar un comentario <!-- revert --> .