Ваш проект не ссылается на платформу «.NETFramework, Version = v4.6.2». Добавьте ссылку на «.NETFramework, Version = v4.6.2» в «TargetFrameworks»

101

Я не могу запустить свои модульные тесты.

У меня следующая ошибка:

Ваш проект не ссылается на платформу .NETFramework, Version = v4.6.2. Добавьте ссылку на .NETFramework, Version = v4.6.2 в свойстве TargetFrameworks файла проекта, а затем повторно запустите восстановление NuGet.

В app.config:

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

В Project> Properties> Application> TargetFramework (.NET Framework 4.6.2)

Как я могу это исправить?

Василь Ткачук
источник

Ответы:

246

Пожалуйста, сделайте следующие шаги

  1. Чистое решение
  2. Чистая папка "пакеты"
  3. Удалить папку "bin"
  4. Удалить папку "obj"
Лариса Савчекоо
источник
24
№3 и №4 решили проблему. У меня была ветка, которая была задачей обновления до 4.7.2, однако мне пришлось переключиться на другую ветку, нацеленную на 4.7.1. Выполните следующие действия, чтобы решить эту проблему.
jjhayter 06
4
Пришлось сделать еще один шаг из каталога решений: del / S project.assets.json
Яннес,
После этой чистки я обнаружил, что у меня была еще одна ошибка в проекте, которая отображала ошибку .Net Framework. Исправление решило проблему.
meJustAndrew
2
stackoverflow.com/a/755433/769137 содержит пакетные сценарии для их удаления.
Vedran
1
Я обновился с 4.7.2 до 4.8, и мне было достаточно удалить obj/папки.
skst,
29

У меня возникла аналогичная проблема, но с v4.7.2. А именно, я продолжал получать такое сообщение журнала сборки:

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.

Несмотря на то, что это выглядело похоже, ни один из предложенных выше шагов не помог мне. Я продолжал видеть это сообщение после каждой сборки. Казалось, ничто не могло помочь.

На самом деле проблема была связана с тем, что из-за миграции мне пришлось поместить два проекта в одну папку кода. Один из них был нацелен на .Net Core , другой - на .Net Framework , оба ссылались на одни и те же стандартные библиотеки .Net. Судя по всему, они используют ту же objпапку, в которую проекты Core помещают project.assets.jsonфайл. Собственно, именно этот файл мешает проекту Framework мешать его нормальной сборке. Кажется, даже если вы выполнили миграцию из packages.config в PackageReference ... что было рекомендовано как одно из возможных решений.

Вы можете попытаться решить проблему, поместив следующий фрагмент в файл проекта Framework:

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

У меня сразу сработало, только потом, когда я внимательно прочитал, зачем он нам нужен и почему работает. Я неожиданно нашел его во второй части документа « Миграция образца приложения WPF на .NET Core 3» в разделе «Убедитесь, что проект .NET Framework все еще строится ». BaseOutputPathи BaseIntermediateOutputPathпеременные msbuild можно найти там, не уверен, хорошо ли они где-либо задокументированы.

Moudrick
источник
Это решило мою проблему. Иначе я бы никогда не нашел, спасибо.
Эрдоган Куртур
1
В VS2019 я обнаружил, что упомянутые вами свойства должны быть перед OutputPath. Сначала я просто уронил их в конец csproj безуспешно. Этот пост содержит некоторые дополнительные сведения и подразумевает, что это может быть исправлено в какой-то момент: github.com/dotnet/msbuild/issues/2070
Джон Дайер,
16

Это случилось со мной при открытии проекта VS2015 в VS2017. Удаление project.assets.jsonиз objпапки сделало свое дело.

В любом случае, Framework из сообщения отсутствовал в файле, но я не добавлял его туда, а удалил его.

Танук
источник
2
Самое простое решение из всех. Просто найдите файл в растворе и сразу удалите его :)
Имад
5

Я проголосовал за Ларису, но подумал, что было бы полезно узнать, как я попал в это. Я добавил в свою сборку стандартный файл проекта .net (мы нацелены на множество платформ), и он создал мусор, найденный в папке obj. Когда появилась сборка работоспособности Android, ее вырвало в папку obj. Моим решением было очистить эту папку перед сборкой. Это сложная проблема, потому что она прекрасно работала годами ... иголка встречается со стогом сена.

Бледный эль
источник
2

В моем случае удалите .pkgrefgen/папку под папкой проекта, она содержит файл project.assets.json, который относится к старой структуре .net

Итун Фэн
источник
2
У меня был файл project.assets.json в папке obj. Удалил папки bin и obj, и проблема исчезла.
Церера,
1

Я столкнулся с тем же самым с .net 4.71. В моем случае я просто перешел из packages.config в «ссылки на пакеты» для

Переход с packages.config на PackageReference

... и это устранило мою проблему. Что касается меня, я все равно собирался сделать это, поэтому, если вы уже идете по этому пути, я просто пропущу вышеуказанное и перейду к ссылкам на пакеты.

ebol2000
источник
0

Я использую очень старый проект .NET, и он работал нормально, пока внезапно не остановился. Обновление Visual Studio исправлено для меня ты.

Эдгар Салазар
источник