Erro de compilação: você deve adicionar uma referência ao System.Runtime

209

Estou preparando uma nova solução ASP.NET MVC 5.1. Estou adicionando um monte de pacotes NuGet e configurando-o com a Zurb Foundation etc.

Como parte disso, adicionei uma referência a um pacote NuGet interno que é uma Biblioteca de Classes Portátil e acho que isso está causando um problema no servidor de compilação.

O TeamCity falha na compilação com:

O tipo 'System.Object' é definido em um assembly que não é referenciado. Você deve adicionar uma referência ao assembly 'System.Runtime, Versão = 4.0.0.0

Originalmente, adicionei a correção para o erro igual ou semelhante ao compilar as páginas da Web Razor, que estão no web.config

<compilation ... >
  <assemblies>
    <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
  </assemblies>
</compilation>

No entanto, o problema não foi resolvido.

Luke Puplett
fonte

Respostas:

216

Para implementar a correção, primeiro expanda a seção de compilação web.config existente que se parece com isso por padrão:

<compilation debug="true" targetFramework="4.5"/>

Depois de expandido, adicionei o seguinte novo XML de configuração, conforme fui instruído:

  <assemblies>     
    <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />   
  </assemblies>

As tags web.config finais devem ficar assim:

<compilation debug="true" targetFramework="4.5">
  <assemblies>     
    <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />   
  </assemblies>
</compilation>
Baahubali
fonte
2
Esse problema foi introduzido em um projeto MVC direcionado para 4.52, nenhum PCL conhecido, mas muitos pacotes nuGet. Acredito que a desinstalação do VS2013 desencadeou isso, mas não sei disso como fato. O erro apareceu apenas nas Views que faziam referência a X-PagedList. Adicionando referência ao projeto web.config (não exibindo web.config), foi corrigido.
Greg Terrell
1
@ GregTerrell Acabei de ter esse problema exato após a atualização de uma versão antiga do X.PagedList. Tão frustrante. Adicionando a referência funcionou, o que eu fiz foi excluído (renomeado) da .vspasta após o fechamento do projeto, reaberto, removido a web.configentrada e agora ele cria e executa bem.
Mardoxx
@Mardoxx Eu tenho tido o mesmo problema. O problema é com o VS ou o X.PagedList? Se for um bug do VS, posso corrigir o web.config, mas não quero alterar os arquivos .config se o problema for com o X.PagedList.
Jecoms
@Jecoms eu respondi à sua questão github :) github.com/kpi-ua/X.PagedList/issues/49#issuecomment-243515362
Mardoxx
3
Este erro ocorreu após a instalação do MoreLINQ no meu projeto .Net 4.5.1. Esta resposta resolveu.
22617 Chris Moschini
125

Adicionar uma referência a este assembly System.Runtime.dll corrigiu o problema:

C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\Facades\System.Runtime.dll

Embora esse arquivo nesse caminho explícito não exista no servidor de construção.

Vou postar de volta com mais informações assim que encontrar alguma documentação sobre o PCL e essas Fachadas.

Atualizar

Sim, praticamente nada nas montagens de fachadas em toda a Internet.

Google:

(Facades OR Facade) Portable Library site:microsoft.com
Luke Puplett
fonte
2
Se você não conseguir encontrar os arquivos DLL na pasta especificada, poderá instalar o Windows SDK conforme explicado: stackoverflow.com/a/14517992/3918598
user3918598
Obrigado. O link acima funcionou após a instalação do 4.5.1 SDK.
Matt Beckman
40
Agora, há um artigo da KB no Suporte da Microsoft que aborda isso.
quer
1
@ PeterMajeed Você realmente deve postar esse comentário como resposta aqui. Muito obrigado pela dica!
precisa saber é
3
Eu tinha de set 'cópia local' a verdade, a fim de fazê-lo funcionar
Phate01
28

A única maneira que funcionou para mim. Adicione o assembly ao web.config

<compilation debug="true" targetFramework="4.5">
  <assemblies>     
    <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />   
  </assemblies>
</compilation>
Lorena Pita
fonte
1
Obrigado Lorena! Trabalhou para mim
Annia Martinez
one-liner de trabalho, não depende do caminho para a biblioteca e não requer a instalação de nada, deve ser aceito!)
Ivan Zverev
Esta resposta é a mesma que a resposta mais votada por @Baahubali
Jesper Mygind
27

O comentário de @ PeterMajeed na resposta aceita me ajudou com um problema relacionado. Não estou usando a biblioteca portátil, mas tenho o mesmo erro de compilação em uma nova instalação do Windows Server 2012, na qual estou executando o TeamCity.

A instalação do Microsoft .NET Framework 4.5.1 Developer Pack resolveu o problema (depois de instalar separadamente o MS Build Tools ).

sfuqua
fonte
5
Alguma idéia do que fazer com o 4.6? Não vejo um pacote de desenvolvedor por perto.
georgiosd
4
Eu tenho os pacotes de desenvolvimento 4.5.1 e 4.5.2 e ainda estou recebendo esse erro. Ideias? Não quero referenciá-lo em todos os meus 25 projetos. Por alguns motivos, outros 25 não o exigem.
31815 abatishchev
Boas perguntas - ainda não lidei com 4.5.2 ou 4.6, pelo menos do ponto de vista da automação de construção.
Sfuqua 31/07/2015
Acho que se você estiver realmente empacado, sempre poderá exibir o Visual Studio Community Service Edition gratuito e mantê-lo atualizado.
Luke Puplett
Não entendo por que esses pacotes de desenvolvedor precisam ser instalados. Eu instalei o VS2013 Pro. Isso não é suficiente? Mas resolveu o problema aqui. Obrigado.
Mike de Klerk
10

Eu tive esse problema em algumas soluções no VS 2015 (embora não no MVC) e até na mesma solução em uma estação de trabalho, mas não em outra. Os erros iniciados apareceram após a alteração da versão do .NET para 4.6 e a referência ao PCL.

A solução é simples: feche a solução e exclua a pasta .vs oculta na mesma pasta que a solução.

Adicionar as referências ausentes, conforme sugerido em outras respostas, também resolve o problema, mas o erro permanece resolvido mesmo depois que você remove as referências novamente.

Quanto ao TeamCity, não posso dizer, pois minha configuração nunca teve um problema. Mas certifique-se de redefinir o catálogo de trabalho como parte de seu esforço de depuração.

wezzix
fonte
6

É um problema antigo, mas eu o enfrentei hoje para corrigir um pipeline de compilação em nosso servidor de integração contínua. Adicionando

<Reference Include="System.Runtime" />

para o meu .csprojarquivo resolveu o problema para mim.

Um pouco de contexto: o projeto interessado é um projeto completo do framework .NET .NET 4.6.1, sem problemas de construção nas máquinas de desenvolvimento. O problema aparece apenas no servidor de compilação, que não podemos controlar, pode ser devido a uma versão diferente do SDK ou algo semelhante.

A adição do proposto <Referencesolucionou o erro de criação, ao preço de um aviso de referência ausente (triângulo amarelo na entrada adicionada na árvore de referências) no Visual Studio.

Espero que isso possa ajudar pessoas em cenários semelhantes ...

Pietro Martinelli
fonte
Resolvido para mim também, dentro de um contexto semelhante
Nicola Celiento
3

Instale o .NET Runtime, bem como o pacote de direcionamento para a versão .NET que você está direcionando.

O pacote de desenvolvedor é apenas essas duas coisas reunidas, mas até hoje não parece ter uma versão 4.6, então você terá que instalar os dois itens separadamente.

Os downloads podem ser encontrados aqui: http://blogs.msdn.com/b/dotnet/p/dotnet_sdks.aspx#

Oenotria
fonte
3

Eu também estava enfrentando esse problema ao tentar executar um projeto ASP .NET MVC após uma pequena atualização em nossa base de código, mesmo que compilada sem erros:

Mensagem de erro do compilador: CS0012: O tipo 'System.Object' é definido em um assembly que não é referenciado. Você deve adicionar uma referência ao assembly 'System.Runtime, Versão = 4.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a'.

Nosso projeto nunca havia se deparado com esse problema, então fiquei cético em relação à alteração dos arquivos de configuração antes de descobrir a causa raiz. Nos logs de erro, eu consegui localizar essa saída detalhada do compilador, que apontava para o que realmente estava acontecendo:

aviso CS1685: O tipo predefinido 'System.Runtime.CompilerServices.ExtensionAttribute' é definido em vários assemblies no alias global; usando a definição de 'c: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ mscorlib.dll'

c: \ Usuários \ Admin \ Desenvolvimento de software \ controle de origem \ Binários \ Publicar \ WebApp \ Views \ Account \ Index.cshtml (35,20): erro CS0012: O tipo 'System.Object' é definido em um assembly que é não referenciado. Você deve adicionar uma referência ao assembly 'System.Runtime, Versão = 4.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a'.

c: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Arquivos temporários do ASP.NET \ meseems.webapp \ 68e2ea0f \ 8c5ee951 \ assembly \ dl3 \ 52ad4dac \ 84698469_3bb3d401 \ System.Collections.Immutable.DLL: (local do símbolo relacionado erro anterior)

Aparentemente, um novo pacote adicionado ao nosso projeto estava fazendo referência a uma versão mais antiga do .NET Framework, causando o problema de "definição em vários assemblies" (CS1685), o que levou ao erro do compilador de exibição do razor view em tempo de execução.

Eu removi o pacote incompatível (System.Collections.Immutable.dll) e o problema parou de ocorrer. No entanto, se o pacote não puder ser removido em seu projeto, você precisará tentar a resposta de Baahubali .

Thomas CG de Vilhena
fonte
2

No nosso servidor de compilação Tfs 2013, tive o mesmo erro, em um projeto de teste. com o principal projeto da web em execução no .Net 4.5.1.

Instalei um pacote nuGet do System Runtime e adicionei a referência de packages \ System.Runtime.4.3.0 \ ref \ net462 \ System.Runtime.dll

Isso resolveu para mim.

Bob Lokerse
fonte
Isso provavelmente deve não trabalho desde que você está dizendo a ele para usar o .NET 4.6.2 DLL com um projeto .NET 4.5.1
Chris Marisic
1
.. e ainda funcionou, para mim também. Sem escolha, pois a pasta ... \ 45 \ ... só tem um arquivo stub no que chamou _._
nathanchere
2

Eu adicionei System.Runtime.dll ao projeto bin e funcionou :)

Abdullah Tahan
fonte
1

Eu tive esse problema em uma solução com um projeto de API da Web e vários projetos de biblioteca. Um dos projetos da biblioteca estava trabalhando na construção, com erros que diziam que os atributos do Unity não eram atributos "válidos" e, em seguida, um erro dizia que eu precisava fazer referência ao System.Runtime.

Depois de muita pesquisa, reinstalação do 4.5.2 Developer Pack, e nada funcionando, achei que talvez fosse apenas uma incompatibilidade de versão. Então, olhei para as propriedades de cada projeto e uma das bibliotecas básicas estava direcionada ao 4.5, enquanto todas as outras estavam direcionadas ao 4.5.2. Mudei esse para também direcionar para 4.5.2 e os erros desapareceram.

sliderhouserules
fonte
1

Copio o arquivo "C: \ Arquivos de programas (x86) \ Assemblies de referência \ Microsoft \ Framework.NETFramework \ v4.5.1 \ Facades \ system.runtime.dll" para a pasta bin do servidor de produção, isso resolve o problema.

Tomluke
fonte
Outra maneira é adicionar uma referência a esta montagem no projeto e definir Copiar Local = True.
John Mc
0

instale o https://www.microsoft.com/en-us/download/details.aspx?id=49978 Microsoft .NET Framework 4.6.1 Developer Pack e adicione esta linha de código no arquivo Web.config

<compilation debug="true" targetFramework="4.5">
          <assemblies>
            <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
          </assemblies>
        </compilation>
Muhammad Armaghan
fonte
0

Para mim ajudou apenas esta linha de código:

Assembly.Load("System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a");

Balabam
fonte
-1

Remover a referência sobre o Nuget Package Manager e adicioná-lo novamente resolveu o problema para mim.

Stefan
fonte