Ваш проект не ссылается на платформу «.NETFramework, Version = v4.5».

91

Я использую VS 2015.

Ваш проект не ссылается на платформу «.NETFramework, Version = 4.5». Добавьте ссылку на .NETFramework, Version = 4.5 в разделе «frameworks» вашего project.json, а затем повторно запустите восстановление NuGet.

Я получаю эту ошибку на уровнях доступа к данным и бизнес-логики вскоре после добавления на уровень MVC. До этого момента все шло хорошо, но я не знаю, что вызвало эту ошибку. Вот мой project.json:

{
  "version": "1.0.0-*",
  "description": "foo bar Class Library",
  "authors": [ "foo bar" ],
  "tags": [ "" ],
  "projectUrl": "",
  "licenseUrl": "",

  "frameworks": {
    "net451": { },
    "dotnet5.4": {
      "dependencies": {
        "Microsoft.CSharp": "4.0.1-beta-23516",
        "System.Collections": "4.0.11-beta-23516",
        "System.Linq": "4.0.1-beta-23516",
        "System.Runtime": "4.0.21-beta-23516",
        "System.Threading": "4.0.11-beta-23516"
      }
    }
  }
}

Вот что я пробовал:

  1. Замена «dotnet5.4» на «net451» (и удаление его), как указано в этом ответе .

Результат та же ошибка.

  1. Замена «dotnet5.4» на «net45» и оставление «net451». Это приводит к новой ошибке:

В вашем project.json нет раздела времени выполнения. Вы должны добавить '"runtimes": {"win": {}}' в свой project.json, а затем повторно запустить восстановление NuGet.

Я попытался сделать так, как предлагала эта ошибка, и добавил

"runtimes": {
    "win":  {}
  },

Это вызвало у меня эту ошибку, которую я не могу преодолеть:

В вашем project.json нет списка win в качестве целевой среды выполнения. Вы должны добавить '"win": {}' в раздел "runtimes" в файле project.json, а затем повторно запустить восстановление NuGet.

Я уже добавил "выигрыш", и это начинает казаться отвлекающим маневром. Что я делаю, изменяя напрямую project.json, разве NuGet не справляется с этим?

С. Лавленд ECY
источник
Для первой части перейдите в настройки вашего проекта и установите Target Framework на 4.5
Hirbod Behnam
Он уже так настроен.
С. Лавленд ECY
1
@ S.LovelandECY Вы решили эту проблему? У меня одна и та же проблема, использую ли я 4.5.1, 4.5.2 или 4.6 - все мои проекты определенно используют одну и ту же версию фреймворка.
Тьерри
@ S.LovelandECY, возможно, вы захотите изменить принятый ответ, учитывая несоответствие между голосами между ним и ответом,
набравшим

Ответы:

10

На самом деле я только что понял проблему. В итоге я щелкнул на Restore Nuget Packagesуровне решения, и мне удалось скомпилировать свой PCLфайл, а затем и остальную часть моего решения.

Надеюсь это поможет.

Тьерри
источник
1
этот ответ был актуален для меня.
Ковач
188

У меня была такая же проблема, и мне пришлось удалить не только содержимое binи objпапки, но и .vsкаталог для решения.

Крис Р. Доннелли
источник
1
.vs вызывал у меня проблему
Лукас
7
это было решение для меня!
Riki
9
.vs мне не понадобился. Благодарность!
geynske006
2
Я понятия не имею, как тебя отблагодарить должным образом. Я чесал в затылке большую часть часа, пытаясь понять это. удалил все 3 и работает как шарм. +1
tfrascaroli
2
У меня есть подозрение, что эта проблема вызвана переключением веток GitHub в моем локальном окне разработки. То есть я работаю в одной ветке, и при компиляции создается множество файлов, которые не являются частью репозитория. Затем я проверяю другую ветку, и эти файлы, не являющиеся репозиториями, все еще на месте. Как-то они конфликтуют с недавно извлеченными файлами.
Phoeniceus Agelaius
128

У меня была та же проблема - это все еще происходит при использовании Visual Studio 2017.3, который использует файлы .csproj вместо project.json. Интересно, что сообщение об ошибке по-прежнему содержит текст «project.json».

Похоже, что причиной этой проблемы является файл блокировки или obj\project.assets.jsonфайл (в зависимости от вашей версии VS) из предыдущей сборки, который не удаляется во время очистки, как описано здесь. .

Удаление /objкаталога вручную - быстрое решение.

Если у вас есть «новый» проект (например, проект .NET Core или netstandard, созданный в VS 2017) и «старый» проект в том же каталоге (например, проект .NET 4.6, созданный в VS 2015), похоже, они будут постоянно бороться, потому что они оба используют ./objкаталог по-разному. Больше информации здесь. .

Обходной путь msbuild - заставить один из ваших проектов использовать другой objкаталог. Я добавил это в свой "старый" csproj:

<PropertyGroup>
  <!-- Needed due to old project and new project in same directory: https://github.com/NuGet/Home/issues/5126 -->
  <BaseIntermediateOutputPath>obj_netfx\</BaseIntermediateOutputPath>
</PropertyGroup>
кримбо
источник
4
Этот обходной путь хорошо работает с VS 2017, вы сэкономили мне время.
MechanicalCoder
2
Блестяще. Также отличное объяснение.
Мик Бирн,
1
Позвольте мне добавить свою благодарность. Удаление всех оскорбительных папок "obj" также решило мою проблему.
Стюарт
2
Будьте здоровы! Мне было интересно, где же кровавый файл project.json. Удаление / obj сделал это
Вишну Рат
1
По-прежнему проблема даже в VS 2019. Спасибо за решение!
user2363676
27

Я обнаружил, что у меня возникла проблема с мошенническим проектом project.lock.json. Как только я удалил файл, проблема исчезла.

Вот некоторая документация по project.lock.json.

Еще один совет - убедиться, что project.lock.json игнорируется в вашем файле игнорирования git, и попробовать полную очистку git. Убедитесь, что вы понимаете последствия очистки Git, прежде чем делать это.

Кристиан Финдли
источник
2

У меня была такая же проблема после обновления до Visual Studio для Mac 7.4 (сборка 1033):

Error: Your project is not referencing the "MonoAndroid,Version=v7.1" framework. Add a reference to "MonoAndroid,Version=v7.1" in the "frameworks" section of your project.json, and then re-run NuGet restore.

У меня нет файлов проекта json. Приведенные здесь советы тоже не помогли, поэтому мне пришлось на собственном горьком опыте выяснить, что мне пришлось установить последний Android SDK (Oreo 8.1) в дополнение к моему целевому SDK (Nougat 7.1).

введите описание изображения здесь

Waescher
источник
0

У меня такая же проблема, но я решил, добавив соответствующий ресурс пакета слепков по vs2017-->tools-->options-->Nugetpacakge manager--->updatedправильному URL- адресу пакета.

См. Изображение ниже

введите описание изображения здесь

ч сандип кумар
источник