web-dev-qa-db-fra.com

Transformation de compilation: le type 'Object' est défini dans un assemblage non référencé

Je suis en train d'apporter quelques modifications à une application web asp.Net MVC5, dans laquelle j'ai utilisé typelite pour créer des définitions .ts à partir de classes C # (très pratique). Pour une raison quelconque, j'ai cette erreur lors de l'exécution du T4:

Transformation de compilation: le type 'Object' est défini dans un assemblage non référencé. Vous devez ajouter une référence à Assembly 'mscorlib, version = 2.0.5.0, Culture = neutre, PublicKeyToken = 7cec85d7bea7798e, Retargetable = Yes'.

et cet avertissement:

Transformation de compilation: en supposant que la référence d'assembly 'mscorlib, version = 1.0.3300.0, Culture = neutre, PublicKeyToken = b77a5c561934e089' utilisée par 'EnvDTE' corresponde à l'identité 'mscorlib, Version = 4.0.0.0, Culture = neutre, PublicKeyToken = b77a5c561934e089'. ', vous devrez peut-être fournir la politique d'exécution Mair.Tracking.Web

J'imagine qu'il s'agit d'un élément lié à la version EnvDTE utilisée par TypeLite et à la référence à mscorlib utilisée par EnvDTE. Dois-je ajouter un bindingRedirect dans le fichier web.config?

J'utilise VS2015 avec Update2 CTP.

14
qwertoyo

Je peux confirmer que les bibliothèques de classes Portable associées aux modèles T4 sont à l'origine de ce problème dans Visual Studio 2015 Update 2. Je ne pouvais pas trouver de meilleure solution que de recibler TypeLITE sur une infrastructure .NET complète.

À partir de la version 1.8.0, le package de nuget TypeLITE contient une copie de la bibliothèque qui cible le framework .NET complet. Si votre projet cible intégralement le framework .NET, l'assembly TypeLITE correct est sélectionné lors de l'installation et tout fonctionne correctement dans Visual Studio 2015 Update 2. Malheureusement, si votre projet cible PCL, vous n'avez pas de chance avec Visual Studio 2015 Update 2. Je suis à la recherche d'une meilleure solution.

10
Lukas Kabrt

Merci à Ian Yates d’avoir ouvert l’élément Connect.

Microsoft a republié KB3151378 le 4 mai 2016. Je peux confirmer que cette mise à jour résout le problème lorsque des modèles T4 sont utilisés avec des fichiers EDMX. Malheureusement, je n'utilise pas TypeLite, je ne peux donc pas confirmer qu'il résout le problème du PO, bien que je suppose que c'est le cas.

De la page KB:

Numéro 6:

Dans les modèles T4, des erreurs se produisent lorsque vous faites référence à un assembly conçu pour une version du .NET Framework différente de celle du bureau (complet). Par exemple, des erreurs se produisent lorsque vous faites référence à des bibliothèques portables.

7
SvenAelterman

Il semble que cela devrait être corrigé par KB3151378 .

Notes pour la version 14.0.25130.0:

Issue 6

Dans les modèles T4, des erreurs se produisent lorsque vous faites référence à un assembly conçu pour une version du .NET Framework différente de celle du bureau (complet). Par exemple, des erreurs se produisent lorsque vous faites référence à des bibliothèques portables.

2
StriplingWarrior

Spécifiquement pour TypeLite, j’en ai ouvert ma copie (assez périmée, mais je l’ai modifiée pour répondre à mes besoins) et j’ai cessé d’être une bibliothèque portable. Cela a été fait en suivant les étapes à https://stackoverflow.com/a/23135170/1053381 . Maintenant que ce n'est pas une bibliothèque portable, je peux exécuter à nouveau mon modèle T4.

J'ai beaucoup d'autres modèles T4 dans ma solution qui utilisent ImmutableObjectGraph (search GitHub) et ils se sont bien déroulés malgré l'utilisation d'une bibliothèque portable. Je n’ai pas trop approfondi les détails, mais j’ai appris que mscorlib 2.0.5.0 était associé à des bibliothèques portables, etc. et qu’il n’était vraiment pas nécessaire que TypeLite soit lui-même portable.

J'espère que cela aide les autres.

Il existe également un problème ouvert dans Connect: https://blogs.msdn.Microsoft.com/visualstudio/2016/03/03/visual-studio-2015-update-2-rc/ car il s’agit toujours d’une régression. VS2015 Update 2.

1
Ian Yates

J'avais la version complète de TypeLite 1.5.1 installée (WebApplication .NET Full version 4.5.1 standard) et une simple mise à jour à la version 1.8.1 a permis de résoudre le problème. Donc, je devrais dire que VS 2015 Update2 RC et Update2 RTM ne fonctionne ni avec la version FULL de TypeLite ni avec le PORTABLE (oui, la version 1.5.1 a déjà la version portable)

0
Sergey