Quiero eliminar el especificador TargetFramework de mis archivos de proyecto y pasarlo a través de la línea de comandos. Suena fácil:
dotnet build -f net5Pero el gran problema es el aspecto NuGet. Porque
dotnet restorese queja del marco faltante:
dotnet restore common\common.csproj Determinando proyectos para restaurar... C:\Program Files\dotnet\sdk\5.0.400\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.TargetFrameworkInference.targets(92,5) : error NETSDK1013: No se reconoció el valor de TargetFramework ''. Puede estar mal escrito. De lo contrario, las propiedades TargetFrameworkIdentifier y/o TargetFrameworkVersion deben especificarse explícitamente.
El problema es que dotnet restore no acepta un argumento TargetFamework. Por lo tanto, me veo obligado a escribir TargetFramework en el archivo de configuración: lo que es peor, siempre hay una única restauración de NuGet en los directorios obj , por lo que cada vez que cambio entre los marcos de destino, necesito modificar el archivo de configuración y realizar una nueva restauración. Esto es extremadamente engorroso y me pregunto cómo se puede evitar.
Si esto no se puede resolver, eliminaría NuGet y haría referencia directamente a los conjuntos de paquetes.
Dado que dotnet restore y dotnet build son envoltorios de dotnet msbuild , puede usar todos los modificadores de MSBuild para cambiar el comportamiento del sistema de compilación.
Aquí tenemos que establecer el marco de destino, que se puede hacer por
<TargetFramework>net5.0</TargetFramework>O
dotnet restore -p:TargetFramework=net5.0O