Erreur de génération: vous devez ajouter une référence à System.Runtime

209

Je prépare une toute nouvelle solution ASP.NET MVC 5.1. J'ajoute un tas de packages NuGet et je le configure avec Zurb Foundation, etc.

Dans le cadre de cela, j'ai ajouté une référence à un package NuGet interne qui est une bibliothèque de classes portable et je pense que cela provoque un problème sur le serveur de génération.

TeamCity échoue à la construction avec:

Le type 'System.Object' est défini dans un assembly qui n'est pas référencé. Vous devez ajouter une référence à l'assembly 'System.Runtime, Version = 4.0.0.0

J'ai initialement ajouté le correctif pour la même erreur ou une erreur similaire lors de la compilation des pages Web Razor, ce correctif étant dans le web.config

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

Cependant, le problème n'est pas résolu.

Luke Puplett
la source

Réponses:

216

Pour implémenter le correctif, développez d'abord la section de compilation web.config existante qui ressemble à ceci par défaut:

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

Une fois développé, j'ai ensuite ajouté la nouvelle configuration XML suivante, comme indiqué:

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

Les balises web.config finales devraient ressembler à ceci:

<compilation debug="true" targetFramework="4.5">
  <assemblies>     
    <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />   
  </assemblies>
</compilation>
Baahubali
la source
2
Ce problème s'est glissé dans un projet MVC ciblant 4.52, pas de PCL connu mais de nombreux packages nuGet. Je crois que la désinstallation de VS2013 a déclenché cela, mais je ne le sais pas comme un fait. L'erreur n'est apparue que dans les vues qui faisaient référence à X-PagedList. L'ajout d'une référence au projet web.config (pas les vues web.config) l'a corrigé.
Greg Terrell
1
@GregTerrell Je viens d'avoir ce problème exact après la mise à niveau d'une ancienne version de X.PagedList. Si frustrant. L'ajout de la référence a fonctionné, puis ce que j'ai fait a été supprimé (renommé) le .vsdossier après la fermeture du projet, l'a rouvert, a supprimé l' web.configentrée et maintenant il se construit et fonctionne correctement.
Mardoxx
@Mardoxx J'ai eu le même problème. Le problème est-il avec VS ou X.PagedList? S'il s'agit d'un bogue VS, je peux corriger web.config, mais je ne veux pas modifier les fichiers .config si le problème est avec X.PagedList.
Jecoms
@Jecoms J'ai répondu à votre problème github :) github.com/kpi-ua/X.PagedList/issues/49#issuecomment-243515362
Mardoxx
3
Vous avez cette erreur après avoir installé MoreLINQ dans mon projet .Net 4.5.1. Cette réponse l'a résolu.
Chris Moschini
125

L'ajout d'une référence à cet assembly System.Runtime.dll a résolu le problème:

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

Bien que ce fichier dans ce chemin explicite n'existe pas sur le serveur de génération.

Je reviendrai avec plus d'informations une fois que j'aurai trouvé de la documentation sur PCL et ces façades.

Mettre à jour

Ouais à peu près rien sur les assemblages de façade sur tout Internet.

Google:

(Facades OR Facade) Portable Library site:microsoft.com
Luke Puplett
la source
2
Si vous ne trouvez pas les fichiers dll dans le dossier spécifié, vous pouvez installer le SDK Windows comme expliqué: stackoverflow.com/a/14517992/3918598
user3918598
Merci. Le lien ci-dessus a fonctionné après l'installation du SDK 4.5.1.
Matt Beckman
40
Il existe maintenant un article de la base de connaissances sur le support Microsoft qui résout ce problème.
Peter Majeed
1
@PeterMajeed Vous devriez vraiment poster ce commentaire comme réponse ici. Merci beaucoup pour l'astuce!
julealgon
3
J'ai dû mettre 'Copy local' sur true pour le faire fonctionner
Phate01
28

La seule façon qui a fonctionné pour moi. Ajoutez l'assembly à 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
la source
1
Merci Lorena! A travaillé pour moi
Annia Martinez
fonctionnant sur une seule ligne, ne dépend pas du chemin d'accès à la bibliothèque et ne nécessite rien d'installer, devrait être accepté!)
Ivan Zverev
Cette réponse est la même que la réponse la mieux votée de @Baahubali
Jesper Mygind
27

@ Le commentaire de PeterMajeed dans la réponse acceptée m'a aidé à résoudre un problème connexe. Je n'utilise pas la bibliothèque portable, mais j'ai la même erreur de génération sur une nouvelle installation de Windows Server 2012, où j'exécute TeamCity.

L'installation de Microsoft .NET Framework 4.5.1 Developer Pack a résolu le problème (après avoir installé séparément les outils de build MS ).

sfuqua
la source
5
Des idées quoi faire avec 4.6? Je ne vois pas de pack développeur autour.
georgiosd
4
J'ai à la fois des packs de développement 4.5.1 et 4.5.2 et j'obtiens toujours cette erreur. Des idées? Je ne veux pas le référencer dans tous mes 25 projets. Pour certaines raisons, 25 autres ne l'exigent pas.
abatishchev
Bonnes questions - je n'ai pas encore traité de 4.5.2 ou 4.6, du moins du point de vue de l'automatisation de la construction.
sfuqua
Je suppose que si vous êtes vraiment bloqué, vous pouvez toujours afficher la version gratuite de Visual Studio Community Service Edition et la mettre à jour.
Luke Puplett
Je ne comprends pas pourquoi ces packs de développement doivent être installés. J'ai installé VS2013 Pro. N'est-ce pas suffisant? Mais cela a résolu le problème ici. Merci.
Mike de Klerk
10

J'ai eu ce problème dans certaines solutions sur VS 2015 (pas MVC cependant), et même dans la même solution sur un poste de travail mais pas sur un autre. Les erreurs commencées sont apparues après avoir remplacé la version .NET par 4.6 et référencé PCL.

La solution est simple: fermez la solution et supprimez le dossier .vs masqué dans le même dossier que la solution.

L'ajout des références manquantes, comme suggéré dans d'autres réponses, résout également le problème, mais l'erreur reste résolue même après avoir supprimé à nouveau les références.

Quant à TeamCity, je ne peux pas le dire car ma configuration n'a jamais eu de problème. Mais assurez-vous de réinitialiser le catalogue de travail dans le cadre de votre effort de débogage.

wezzix
la source
6

C'est un ancien problème, mais je l'ai rencontré aujourd'hui afin de corriger un pipeline de génération sur notre serveur d'intégration continue. Ajouter

<Reference Include="System.Runtime" />

à mon .csprojdossier a résolu le problème pour moi.

Un peu de contexte: le projet intéressé est un projet complet de framework 4.6.1 .Net, sans problème de build sur les machines de développement. Le problème n'apparaît que sur le serveur de build, que nous ne pouvons pas contrôler, peut être dû à une autre version du SDK ou quelque chose de similaire.

L'ajout de la proposition a <Referencerésolu l'erreur de construction, au prix d'un avertissement de référence manquant (triangle jaune sur l'entrée ajoutée dans l'arborescence des références) dans Visual Studio.

J'espère que cela peut aider les gens dans des scénarios similaires ...

Pietro Martinelli
la source
Résolu pour moi aussi, dans un contexte similaire
Nicola Celiento
3

Installez le .NET Runtime ainsi que le pack de ciblage pour la version .NET que vous ciblez.

Le pack développeur est simplement ces deux choses regroupées, mais à ce jour ne semble pas avoir de version 4.6, vous devrez donc installer les deux éléments séparément.

Les téléchargements peuvent être trouvés ici: http://blogs.msdn.com/b/dotnet/p/dotnet_sdks.aspx#

Oenotria
la source
3

J'étais également confronté à ce problème en essayant d'exécuter un projet ASP .NET MVC après une mise à jour mineure de notre base de code, même s'il a été compilé sans erreur:

Message d'erreur du compilateur: CS0012: Le type «System.Object» est défini dans un assembly qui n'est pas référencé. Vous devez ajouter une référence à l'assembly 'System.Runtime, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a'.

Notre projet n'avait jamais rencontré ce problème, j'étais donc sceptique quant à la modification des fichiers de configuration avant de découvrir la cause première. À partir des journaux d'erreurs, j'ai pu localiser cette sortie détaillée du compilateur qui indiquait ce qui se passait réellement:

avertissement CS1685: Le type prédéfini 'System.Runtime.CompilerServices.ExtensionAttribute' est défini dans plusieurs assemblys dans l'alias global; en utilisant la définition de «c: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ mscorlib.dll»

c: \ Users \ Admin \ Software Development \ source-control \ Binaries \ Publish \ WebApp \ Views \ Account \ Index.cshtml (35,20): erreur CS0012: le type 'System.Object' est défini dans un assembly qui est non référencé. Vous devez ajouter une référence à l'assembly 'System.Runtime, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a'.

c: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Fichiers ASP.NET temporaires \ meseems.webapp \ 68e2ea0f \ 8c5ee951 \ assembly \ dl3 \ 52ad4dac \ 84698469_3bb3d401 \ System.Collections.Immutable.DLL: (Emplacement du symbole lié à l'erreur précédente)

Apparemment, un nouveau package ajouté à notre projet faisait référence à une ancienne version du .NET Framework, provoquant le problème de "définition dans plusieurs assemblys" (CS1685), qui a conduit à l'erreur du compilateur de la vue rasoir lors de l'exécution.

J'ai supprimé le package incompatible (System.Collections.Immutable.dll) et le problème a cessé de se produire. Cependant, si le package ne peut pas être supprimé dans votre projet, vous devrez essayer la réponse de Baahubali .

Thomas CG de Vilhena
la source
2

Sur notre serveur de build Tfs 2013, j'ai eu la même erreur, dans un projet de test. avec le projet Web principal exécuté sur .Net 4.5.1.

J'ai installé un package nuGet de System Runtime et ajouté la référence à partir de packages \ System.Runtime.4.3.0 \ ref \ net462 \ System.Runtime.dll

Cela m'a résolu.

Bob Lokerse
la source
Cela ne devrait probablement pas fonctionner puisque vous lui dites d'utiliser la DLL .NET 4.6.2 avec un projet .NET 4.5.1
Chris Marisic
1
.. et pourtant ça a marché, pour moi aussi. Pas de choix car le dossier ... \ 45 \ ... ne contient qu'un fichier stub appelé _._
nathanchere
2

j'ai ajouté System.Runtime.dll au projet bin et cela a fonctionné :)

Abdullah Tahan
la source
1

J'ai eu ce problème dans une solution avec un projet d'API Web et plusieurs projets de bibliothèque. L'un des projets de bibliothèque fonctionnait sur la construction, avec des erreurs indiquant que les attributs Unity n'étaient pas des attributs "valides", puis une erreur a dit que je devais faire référence à System.Runtime.

Après de nombreuses recherches, la réinstallation du pack développeur 4.5.2 et rien ne fonctionnait, je me suis dit que ce n'était peut-être qu'une incompatibilité de version. J'ai donc examiné les propriétés de chaque projet, et l'une des bibliothèques de base ciblait 4.5 tandis que toutes les autres ciblaient 4.5.2. J'ai changé celui-là pour cibler également 4.5.2 et les erreurs ont disparu.

sliderhouserules
la source
1

Je copie le fichier "C: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.5.1 \ Facades \ system.runtime.dll" dans le dossier bin du serveur de production, cela résout le problème.

Tomluke
la source
Une autre façon consiste à ajouter une référence à cet assembly dans le projet et à définir Copy Local = True.
John Mc
0

installez https://www.microsoft.com/en-us/download/details.aspx?id=49978 Microsoft .NET Framework 4.6.1 Developer Pack et ajoutez cette ligne de code dans le fichier 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
la source
0

Pour moi, n'a aidé que cette ligne de code:

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

Balabam
la source
-1

Supprimer la référence sur le Nuget Package Manager et l'ajouter à nouveau a résolu le problème pour moi.

Stefan
la source