Errore di compilazione: è necessario aggiungere un riferimento a System.Runtime


209

Sto preparando una nuovissima soluzione ASP.NET MVC 5.1. Sto aggiungendo un sacco di pacchetti NuGet e lo sto configurando con Zurb Foundation ecc.

Come parte di ciò, ho aggiunto un riferimento a un pacchetto NuGet interno che è una libreria di classi portatile e penso che ciò stia causando un problema sul server di compilazione.

TeamCity fallisce la compilazione con:

Il tipo "System.Object" è definito in un assembly a cui non si fa riferimento. È necessario aggiungere un riferimento all'assembly 'System.Runtime, Versione = 4.0.0.0

Inizialmente ho aggiunto la correzione per lo stesso errore o simile durante la compilazione delle pagine Web di Razor, che si trovava nel file web.config

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

Tuttavia, il problema è irrisolto.

Risposte:


216

Per implementare la correzione, prima espandi la sezione di compilazione web.config esistente che assomiglia a questa per impostazione predefinita:

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

Una volta espanso, ho aggiunto il seguente nuovo XML di configurazione secondo le istruzioni:

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

I tag web.config finali dovrebbero apparire così:

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

2
Questo problema si è insinuato in un progetto MVC rivolto a 4.52, nessun PCL noto ma molti pacchetti nuGet. Credo che la disinstallazione di VS2013 abbia innescato questo, ma non lo so come fatto. L'errore è emerso solo nelle viste che fanno riferimento a X-PagedList. Aggiunta di riferimento al progetto web.config (non vista web.config) risolto.
Greg Terrell,

1
@GregTerrell Ho appena avuto questo problema esatto dopo l'aggiornamento da una vecchia versione di X.PagedList. Così frustrante. L'aggiunta del riferimento ha funzionato, quindi quello che ho fatto è stato eliminato (rinominato) la .vscartella dopo aver chiuso il progetto, riaperto, rimosso la web.configvoce e ora viene compilato e funziona correttamente.
Mardoxx,

@Mardoxx Ho avuto lo stesso problema. Il problema è con VS o X.PagedList? Se si tratta di un bug VS, posso correggere web.config, ma non voglio modificare i file .config se il problema riguarda X.PagedList.
Jecoms

@Jecoms ho risposto al tuo problema con Github :) github.com/kpi-ua/X.PagedList/issues/49#issuecomment-243515362
Mardoxx

3
Ho ricevuto questo errore dopo aver installato MoreLINQ nel mio progetto .Net 4.5.1. Questa risposta l'ha risolto.
Chris Moschini,

125

L'aggiunta di un riferimento a questo assembly System.Runtime.dll ha risolto il problema:

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

Sebbene quel file in quel percorso esplicito non esista sul server di compilazione.

Riporterò con ulteriori informazioni una volta trovata la documentazione su PCL e queste facciate.

Aggiornare

Sì, praticamente nulla nelle assemblee di facciata su tutta Internet.

Google:

(Facades OR Facade) Portable Library site:microsoft.com

2
Se non è possibile trovare i file dll alla cartella specificata, è possibile installare Windows SDK come spiegato: stackoverflow.com/a/14517992/3918598
user3918598

Grazie. Il collegamento sopra ha funzionato dopo l'installazione dell'SDK 4.5.1.
Matt Beckman,

40
C'è ora un articolo KB sul supporto Microsoft che risolve questo problema.
Peter Majeed

1
@PeterMajeed Dovresti davvero pubblicare quel commento come risposta qui. Grazie mille per il suggerimento!
julealgon

3
Ho dovuto impostare 'Copia locale' su true per farlo funzionare
Phate01

28

L'unico modo che ha funzionato per me. Aggiungi l'assembly a web.config

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

1
Grazie Lorena! Ha funzionato per me
Annia Martinez il

funziona con una sola riga, non dipende dal percorso della libreria e non richiede l'installazione di nulla, dovrebbe essere accettato!)
Ivan Zverev

Questa risposta è la stessa della risposta più votata da @Baahubali
Jesper Mygind,

27

Il commento di PeterMajeed nella risposta accettata mi ha aiutato con un problema correlato. Non sto usando la libreria portatile, ma ho lo stesso errore di build su una nuova installazione di Windows Server 2012, in cui eseguo TeamCity.

L'installazione del Developer Pack di Microsoft .NET Framework 4.5.1 ha risolto il problema (dopo aver installato separatamente MS Build Tools ).


5
Qualche idea su cosa fare con 4.6? Non vedo un pacchetto di sviluppatori in giro.
Georgiosd,

4
Ho entrambi i pacchetti dev 4.5.1 e 4.5.2 e continuo a ricevere questo errore. Idee? Non voglio fare riferimento a tutti i miei 25 progetti. Per alcuni motivi altri 25 non lo richiedono.
abatishchev,

Buone domande: non ho ancora a che fare con 4.5.2 o 4.6, almeno dal punto di vista dell'automazione della build.
sfuqua,

Immagino che se sei davvero bloccato, potresti sempre far apparire Visual Studio Community Service Edition gratuito e tenerlo aggiornato.
Luke Puplett,

Non capisco perché questi pacchetti di sviluppo debbano essere installati. Ho installato VS2013 Pro. Non è abbastanza? Ma ha risolto il problema qui. Grazie.
Mike de Klerk,

10

Ho avuto questo problema in alcune soluzioni su VS 2015 (non MVC però) e persino nella stessa soluzione su una workstation ma non su un'altra. Gli errori iniziati sono comparsi dopo aver modificato la versione .NET in 4.6 e fatto riferimento a PCL.

La soluzione è semplice: chiudere la soluzione ed eliminare la cartella nascosta .vs nella stessa cartella della soluzione.

L'aggiunta dei riferimenti mancanti come suggerito in altre risposte risolve anche il problema, ma l'errore rimane risolto anche dopo aver rimosso nuovamente i riferimenti.

Per quanto riguarda TeamCity, non posso dire che la mia configurazione non ha mai avuto problemi. Assicurati di reimpostare il catalogo funzionante come parte del tuo sforzo di debug.


6

È un vecchio problema, ma l'ho affrontato oggi per risolvere una pipeline di build sul nostro server di integrazione continua. Aggiunta

<Reference Include="System.Runtime" />

al mio .csprojfile risolto il problema per me.

Un po 'di contesto: il progetto interessato è un progetto .Net framework 4.6.1 completo, senza problemi di costruzione sulle macchine di sviluppo. Il problema si presenta solo sul server di build, che non possiamo controllare, potrebbe essere dovuto a una versione SDK diversa o qualcosa di simile.

L'aggiunta della proposta ha <Referencerisolto l'errore di costruzione, al prezzo di un riferimento mancante avviso di (triangolo giallo sulla voce aggiunta nella struttura dei riferimenti) in Visual Studio.

Spero che questo possa aiutare le persone in scenari simili ...


Risolto anche per me, in un contesto simile
Nicola Celiento,

3

Installa .NET Runtime e il pacchetto di targeting per la versione .NET di destinazione.

Il pacchetto di sviluppo è solo queste due cose raggruppate insieme ma ad oggi non sembra avere una versione 4.6, quindi dovrai installare i due elementi separatamente.

I download sono disponibili qui: http://blogs.msdn.com/b/dotnet/p/dotnet_sdks.aspx#


3

Stavo anche affrontando questo problema cercando di eseguire un progetto ASP .NET MVC dopo un aggiornamento minore alla nostra base di codice, anche se compilato senza errori:

Messaggio di errore del compilatore: CS0012: Il tipo 'System.Object' è definito in un assembly a cui non si fa riferimento. È necessario aggiungere un riferimento all'assembly "System.Runtime, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a".

Il nostro progetto non ha mai riscontrato questo problema, quindi ero scettico sul cambiamento dei file di configurazione prima di scoprire la causa principale. Dai log degli errori sono stato in grado di individuare questo output dettagliato del compilatore che ha sottolineato ciò che stava realmente accadendo:

avviso CS1685: il tipo predefinito 'System.Runtime.CompilerServices.ExtensionAttribute' è definito in più assiemi nell'alias globale; usando la definizione da 'c: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ mscorlib.dll'

c: \ Users \ Admin \ Sviluppo software \ source-control \ Binaries \ Publish \ WebApp \ Views \ Account \ Index.cshtml (35,20): errore CS0012: il tipo 'System.Object' è definito in un assembly che è non referenziato. È necessario aggiungere un riferimento all'assembly 'System.Runtime, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a'.

c: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ File ASP.NET temporanei \ meseems.webapp \ 68e2ea0f \ 8c5ee951 \ assembly \ dl3 \ 52ad4dac \ 84698469_3bb3d401 \ System.Collections.Immutable.DLL: (posizione del simbolo correlato all'errore precedente)

Apparentemente un nuovo pacchetto aggiunto al nostro progetto faceva riferimento a una versione precedente di .NET Framework, causando il problema della "definizione in più assiemi" (CS1685), che causava l'errore del compilatore della vista del rasoio in fase di esecuzione.

Ho rimosso il pacchetto incompatibile (System.Collections.Immutable.dll) e il problema ha smesso di verificarsi. Tuttavia, se il pacchetto non può essere rimosso nel tuo progetto, dovrai provare la risposta di Baahubali .


2

Sul nostro server di build Tfs 2013 ho avuto lo stesso errore, in un progetto di test. con il progetto Web principale in esecuzione su .Net 4.5.1.

Ho installato un pacchetto nuGet di System Runtime e ho aggiunto il riferimento dai pacchetti \ System.Runtime.4.3.0 \ ref \ net462 \ System.Runtime.dll

Questo mi ha risolto.


Probabilmente non dovrebbe funzionare dal momento che gli stai dicendo di usare la DLL 4.6.2 .NET con un progetto .NET 4.5.1
Chris Marisic,

1
.. eppure ha funzionato, anche per me. Nessuna scelta poiché la cartella ... \ 45 \ ... contiene solo un file stub chiamato _._
nathanchere



1

Ho avuto questo problema in una soluzione con un progetto API Web e diversi progetti di libreria. Uno dei progetti della biblioteca stava lavorando su build, con errori che dicevano che gli attributi Unity non erano attributi "validi", e quindi un errore diceva che dovevo fare riferimento a System.Runtime.

Dopo molte ricerche, la reinstallazione del 4.5.2 Developer Pack e nulla funzionava, ho pensato che forse era solo una mancata corrispondenza della versione. Quindi ho esaminato le proprietà di ogni progetto e una delle librerie di base puntava alla 4.5 mentre ogni altra puntava alla 4.5.2. Ho cambiato quello per targetizzare anche 4.5.2 e gli errori sono andati via.


1

Copio il file "C: \ Programmi (x86) \ Assembly Assembly \ Microsoft \ Framework.NETFramework \ v4.5.1 \ Facades \ system.runtime.dll" nella cartella bin del server di produzione, questo risolve il problema.


Un altro modo è aggiungere un riferimento a questo assembly nel progetto e impostare Copia Local = True.
John Mc,


0

Per me ha aiutato solo questa riga di codice:

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


-1

Rimuovere il riferimento su Nuget Package Manager e aggiungerlo di nuovo ha risolto il problema per me.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.