Seu projeto não está fazendo referência à estrutura “.NETFramework, Version = v4.5”.

91

Estou usando o VS 2015.

Seu projeto não está fazendo referência à estrutura ".NETFramework, Version = 4.5". Adicione uma referência a ".NETFramework, Version = 4.5" na seção "frameworks" de seu project.json e execute novamente a restauração do NuGet.

Estou recebendo este erro em minhas camadas de acesso a dados e lógica de negócios, logo após adicionar à minha camada MVC. As coisas estavam indo bem até então, mas não sei o que desencadeou esse erro. Aqui está meu 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"
      }
    }
  }
}

Aqui está o que tentei:

  1. Substituindo "dotnet5.4" por "net451" (e excluindo-o) conforme encontrado nesta resposta .

O resultado é o mesmo erro.

  1. Substituindo "dotnet5.4" por "net45" e deixando o "net451". Isso resulta em um novo erro:

Seu project.json não tem uma seção de tempos de execução. Você deve adicionar '"runtimes": {"win": {}}' ao seu project.json e, em seguida, executar novamente a restauração do NuGet.

Tentei fazer como este erro sugeriu e adicionar

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

Isso me deu este erro, que não consigo superar:

Seu project.json não lista 'win' como um tempo de execução direcionado. Você deve adicionar '"win": {}' dentro da seção "runtimes" em seu project.json e, em seguida, executar novamente a restauração do NuGet.

Já acrescentei "vitória", e isso está começando a parecer um arenque vermelho. O que estou fazendo alterando o project.json diretamente, o NuGet não está cuidando disso?

S. Loveland ECY
fonte
Para a primeira parte, vá para as configurações do projeto e defina Target Framework para 4.5
Hirbod Behnam
Já está definido dessa forma.
S. Loveland ECY
1
@ S.LovelandECY Você resolveu isso? Estou tendo o mesmo problema se usar 4.5.1, 4.5.2 ou 4.6 - Todos os meus projetos estão definitivamente usando a mesma versão do framework.
Thierry
@ S.LovelandECY você pode querer considerar alterar a resposta aceita dada a disparidade entre os votos entre ela e a resposta com maior votação
RJFalconer

Respostas:

10

Na verdade, acabei de descobrir o problema. Acabei clicando no Restore Nuget Packagesnível da solução e consegui compilar meu PCLarquivo e depois o resto da minha solução.

Espero que isto ajude.

Thierry
fonte
1
essa resposta é o que foi relevante para mim.
kovac
186

Tive o mesmo problema, e acabei tendo que não só deletar o conteúdo das pastas bine obj, mas também o .vsdiretório da solução.

Chris R. Donnelly
fonte
1
.vs estava causando o problema para mim
Lukas
7
essa foi a solução para mim!
Riki
9
.vs não era necessário para mim. Obrigado!
geynske006
2
Não tenho ideia de como agradecer direito. Estou coçando a cabeça há quase uma hora tentando descobrir isso. excluiu todos os 3 e funcionando como um encanto. +1
tfrascaroli
2
Suspeito que esse problema seja causado pela troca de branches do GitHub em minha caixa de desenvolvimento local. Ou seja, eu trabalho em um branch e a compilação cria vários arquivos que não fazem parte do repositório. Então eu faço checkout em um branch diferente, e esses arquivos não-repositório ainda estão no lugar. De alguma forma, eles entram em conflito com os arquivos recém-retirados.
Phoeniceus Agelaius
127

Eu tive o mesmo problema - isso ocorre ainda usando o Visual Studio 2017.3, que usa arquivos .csproj em vez de project.json. Curiosamente, a mensagem de erro ainda contém o texto "project.json".

Parece que a causa deste problema é um arquivo de bloqueio ou obj\project.assets.jsonarquivo (dependendo da sua versão do VS) de uma compilação anterior, que não é removido durante uma limpeza, conforme descrito aqui .

A exclusão manual do /objdiretório é uma solução alternativa rápida.

Se você tiver um projeto "novo" (por exemplo, .NET Core ou projeto netstandard criado no VS 2017) e um projeto "antigo" no mesmo diretório (por exemplo, projeto .NET 4.6 criado no VS 2015), parece que eles vão lutar continuamente porque ambos usam o ./objdir de maneiras diferentes. Mais informações aqui. .

A solução alternativa do msbuild é fazer um de seus projetos usar um objdiretório diferente . Eu adicionei isso ao meu "antigo" 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>
crimbo
fonte
4
Esta solução alternativa funciona bem com o VS 2017, você me economizou a tempo.
MechanicalCoder
2
Brilhante. Ótima explicação também.
Mick Byrne
1
Deixe-me acrescentar meus agradecimentos. Excluir todas as pastas "obj" ofensivas também resolveu meu problema.
Stuart
2
Deus te abençoê! Eu queria saber onde está o sangrento arquivo project.json. Excluindo / obj did it
Vishnoo Rath
1
Ainda é um problema mesmo no VS 2019. Obrigado pela solução!
user2363676
27

Descobri que um project.lock.json desonesto estava causando esse problema para mim. Depois de excluir o arquivo, o problema foi embora.

Aqui está alguma documentação sobre project.lock.json.

Outro conselho seria garantir que project.lock.json seja ignorado em seu arquivo git ignore e tentar um git clean completo. Certifique-se de entender as implicações de uma limpeza do Git antes de fazer isso.

Christian Findlay
fonte
2

Tive o mesmo problema após atualizar para o Visual Studio para Mac 7.4 (compilação 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.

Não tenho nenhum arquivo de projeto json. As dicas aqui também não ajudaram, então eu tive que descobrir da maneira mais difícil que eu tive que instalar o SDK do Android mais recente (Oreo 8.1), além do meu SDK de destino (Nougat 7.1).

insira a descrição da imagem aqui

Waescher
fonte
0

Tenho o mesmo problema, mas resolvi adicionando o recurso de pacote nugget adequado no vs2017-->tools-->options-->Nugetpacakge manager--->updatedURL do pacote adequado.

Consulte a imagem abaixo

insira a descrição da imagem aqui

ch sandeep kumar
fonte