Su proyecto no hace referencia al marco ".NETFramework, Version = v4.6.2". Agregue una referencia a ".NETFramework, Version = v4.6.2" en "TargetFrameworks"

101

No puedo ejecutar mis pruebas unitarias.

Tengo el siguiente error:

Su proyecto no hace referencia al marco ".NETFramework, Version = v4.6.2". Agregue una referencia a ".NETFramework, Version = v4.6.2" en la propiedad "TargetFrameworks" de su archivo de proyecto y luego vuelva a ejecutar NuGet restore.

En app.config:

<startup>
  <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.2"/>
</startup>

En Proyecto> Propiedades> Aplicación> TargetFramework (.NET Framework 4.6.2)

¿Cómo puedo arreglarlo?

Василь Ткачук
fuente

Respuestas:

246

Siga los siguientes pasos

  1. Solución limpia
  2. Limpiar la carpeta "paquetes"
  3. Eliminar carpeta "bin"
  4. Eliminar carpeta "obj"
Larissa Savchekoo
fuente
24
# 3 y # 4 resolvieron el problema. Tenía una rama que era una tarea de actualización a 4.7.2, sin embargo, tuve que cambiar a otra rama que tenía como objetivo 4.7.1. Siga estos pasos para resolver ese problema.
jjhayter
4
Tuve que hacer un paso más, desde el directorio de la solución: del / S project.assets.json
Jannes
Después de hacer esta limpieza, descubrí que tenía otro error en el proyecto que mostraba el error .Net Framework. Arreglarlo resolvió el problema.
meJustAndrew
2
stackoverflow.com/a/755433/769137 tiene scripts por lotes para eliminarlos.
Vedran
1
Actualicé de 4.7.2 a 4.8 y fue suficiente para mí eliminar las obj/carpetas.
skst
29

Experimenté un problema similar, pero con v4.7.2. Es decir, seguí recibiendo un mensaje de registro de compilación como este:

error : Your project does not reference ".NETFramework,Version=v4.7.2" framework. Add a reference to ".NETFramework,Version=v4.7.2" in the "TargetFrameworks" property of your project file and then re-run NuGet restore.

A pesar de que se veía similar, ninguno de los pasos propuestos anteriormente funcionó para mí. Seguí viendo este mensaje después de cada compilación. Nada parecía poder ayudar.

De hecho, el problema estaba relacionado con que, debido a la migración, tuve que poner dos proyectos en una carpeta de código. Uno de ellos estaba dirigido a .Net Core , otro a .Net Framework , ambos hacían referencia a las mismas bibliotecas .Net Standard. Aparentemente, comparten la misma objcarpeta donde los proyectos principales colocan el project.assets.jsonarchivo. En realidad, exactamente este archivo interfiere con el proyecto Framework impidiendo su compilación normal. Parece incluso si realizó Migrar de packages.config a PackageReference ... que se recomendó como una de las posibles soluciones.

Puede intentar solucionar el problema colocando el siguiente fragmento en su archivo de proyecto de Framework:

<Project>
  ...
  <PropertyGroup>
    <BaseOutputPath>$(MSBuildProjectDirectory)/out/$(MSBuildProjectName)/bin</BaseOutputPath>
    <BaseIntermediateOutputPath>$(MSBuildProjectDirectory)/out/$(MSBuildProjectName)/obj</BaseIntermediateOutputPath>
  </PropertyGroup>
  ...
</Project>

Inmediatamente funcionó para mí, fue solo más tarde cuando leí con atención por qué lo necesitamos y por qué funciona. Lo encontré inesperadamente en la parte 2 de Migrar una aplicación WPF de muestra a .NET Core 3 en la sección Asegurarse de que el proyecto de .NET Framework aún se compila . BaseOutputPathy BaseIntermediateOutputPathlas variables msbuild se pueden encontrar allí, no estoy seguro de si están bien documentadas en algún lugar.

moudrick
fuente
Esto resolvió mi problema. De lo contrario, nunca lo encontraría, gracias.
Erdogan Kurtur
1
En VS2019 descubrí que las propiedades que mencionas deben estar antes de OutputPath. Inicialmente, los dejé caer al final del csproj sin éxito. Esta publicación tiene algunos detalles adicionales e implica que esto podría solucionarse en algún momento: github.com/dotnet/msbuild/issues/2070
John Dyer
16

Eso me pasó al abrir un proyecto VS2015 en VS2017. Eliminar el project.assets.jsonde la objcarpeta funcionó.

De todos modos, el Framework del mensaje faltaba en el archivo, aunque no lo agregué allí, fui a eliminarlo.

tanuk
fuente
2
La solución más simple de todas. Simplemente busque el archivo en la solución y elimínelos de una vez :)
Imad
5

Voté a Larissa, pero pensé que podría ser útil saber cómo llegué a esto. Agregué un archivo de proyecto estándar .net a mi compilación (apuntamos a muchas plataformas) y produjo los desechos que se encuentran en la carpeta obj. Cuando apareció la compilación de cordura de Android, vomitó en la carpeta obj. Mi solución fue limpiar esa carpeta como un paso previo a la construcción. Este es un problema difícil porque funcionó bien durante años ... la aguja se encuentra con el pajar.

Pale Ale
fuente
2

Para mi caso, elimine la .pkgrefgen/carpeta debajo de la carpeta del proyecto funciona, contiene un archivo project.assets.json que se refiere al antiguo marco .net

Yitong Feng
fuente
2
El mío era un archivo project.assets.json en la carpeta obj. Se eliminaron las carpetas bin y obj y el problema desapareció.
Ceres
1

Me encontré con lo mismo con .net 4.71. En mi caso, simplemente migré de packages.config a "referencias de paquetes" por

Migrar de packages.config a PackageReference

... y solucionó mi problema. Para mí, iba a hacer esto de todos modos, así que si ya está yendo por este camino, simplemente omitiría lo anterior y migraría a las referencias del paquete.

ebol2000
fuente
0

Estoy usando un proyecto .NET muy antiguo y funcionaba bien hasta que se detuvo de repente. La actualización de Visual Studio se solucionó para mí.

Edgar Salazar
fuente