51 votes

Le type 'Object' est défini dans une assembly qui n'est pas référencée (NET Standard 2.0/.NET Framework 4.6.1)

Je suis en train d'utiliser la prévisualisation de .NET Standard 2.0, sur laquelle mes bibliothèques de classes sont basées.

Après avoir rencontré des problèmes avec quelques packages NuGet, notamment en ce qui concerne l'extraction d'archives, j'ai décidé de migrer mes projets Console .NET Core 2.0 vers le .NET Framework 4.6.1.

Le .NET Framework 4.6.1 est censé implémenter la spécification .NET Standard 2.0 - selon différentes sources. Notamment le Repo GitHub dotnet/standard.

Implémentation de Net Standard par Net Framework et Core

Malheureusement, la migration vers le .NET Framework a entraîné les erreurs suivantes dans tous les projets Console .NET Framework :

Erreur CS0012 Le type 'Object' est défini dans une assembly qui n'est pas référencée. Vous devez ajouter une référence à l'assembly 'netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'.

Object peut être n'importe quoi : Enum, Task, ...

Comment puis-je faire référence aux bibliothèques de classes .NET Standard 2.0 avec .NET Framework (4.6.1) sans obtenir de telles erreurs ?

0 votes

Nous ne devrions pas modifier le fichier de configuration. J'ai évité de modifier le fichier .config dans ce cas. J'ai modifié le fichier Microsoft.NetFramework.CurrentVersion.targets dans C: \Program Files (x86)\MSBuild\14.0\Bin pour inclure les lignes ci-dessous, mon code a commencé à se construire correctement.

46voto

OMID Points 491

Essayez d'ajouter une référence à netstandard dans le fichier web.config comme ci-dessous :

0 votes

Merci, cela m'a fait gagner beaucoup de temps

29voto

FerX32 Points 725

J'avais ce problème même après avoir utilisé la dernière version 2.0 et VS 15.3. Cependant, je pense que mon problème était différent. Après la mise à niveau de Core 1.1 vers 2.0, pour une raison quelconque, mon .csproj de mon .web avait 1.1.2. Ce qui empêchait le projet de cibler la bonne version 2.0.

Mes projets de bibliothèques de classes (.Layer) avaient 1.6.1.

J'ai supprimé les deux et mon projet a finalement commencé à utiliser la version 2.0 et tout s'est bien passé par la suite.

0 votes

J'avais le même doute concernant RuntimeFrameworkVersion, après l'avoir supprimé, les erreurs ont disparu.

0 votes

Correct, j'ai eu un problème très similaire. J'ai utilisé ce tutoriel pour migrer mon projet de 1.1 à 2.0 mais il a échoué à se compiler avec une série de messages d'erreurs identiques à ceux rapportés par l'OP. Finalement, j'ai dû modifier RuntimeFrameworkVersion de 1.6.1 à 2.0 et le problème a été résolu. Notez que je n'ai pas supprimé ce nœud.

3 votes

@Hudgi contente que cela ait fonctionné pour vous sans le supprimer. Cependant, à mon avis, vous dites que vous voulez utiliser la version 2.0 pour votre projet. Donc, si vous la mettez à jour vers... disons 2.1 à l'avenir, vous pourriez rencontrer le même problème. Je crois que si vous supprimez RuntimeFrameworkVersion, .Core utilisera la version disponible la plus récente.

13voto

Janes Abou Chleih Points 1681

Après avoir installé la version de prévisualisation 2 de NET Core 2.0 et mis à jour à la dernière version de Visual Studio 2017 Preview (15.3), les références sont maintenant installées automatiquement.

Conformément à ce problème GitHub, qui traite d'un problème similaire, vous devez actuellement ajouter manuellement une référence au package NETStandard.Library.NETFramework dans votre projet .NET Framework.

Installer via la console NuGet:

Install-Package NETStandard.Library.NETFramework -Version 2.0.0-preview1-25305-02 -Pre

Il y a quelques jours, la version de prévisualisation 2 de NET Core/Standard 2.0 a été publiée, si vous l'avez mise à jour, la version suivante est nécessaire:

Install-Package NETStandard.Library.NETFramework -Version 2.0.0-preview2-25405-01 -Pre

ou via le magasin NuGet (cochez Afficher les versions préliminaires) et cherchez NETStandard.Library.NETFramework

Cela résoudra alors les références, les erreurs devraient disparaître.

*Joperezr indique que Microsoft prévoit de laisser un outil gérer ceci ultérieurement.

Pour l'instant, vous devez ajouter manuellement une référence à ce package, ce qui peut être agaçant, mais à l'avenir, nous prévoyons que l'outil le fera pour vous.

0 votes

Je ne sais pas si je suis le seul à avoir ce problème, alors j'ai pensé le partager en répondant moi-même

0 votes

Cela devrait être corrigé dans la prochaine version preview2 et une mise à jour de l'aperçu de VS 15.3 qui inclut la logique nécessaire, ne nécessitant plus ce paquet nuget.

0 votes

@MartinUllrich: D'accord, merci pour l'info. Alors ma réponse est (presque/déjà) obsolète ... Je garderai la question ouverte jusqu'à la nouvelle sortie de l'aperçu de VS et la supprimerai ensuite.

2voto

ankur Points 13

Juste au cas où certaines personnes rencontrent encore ce problème comme moi

mettez à jour votre version de Visual Studio 2017 à >15.3 (vérifiez la version dans Aide->À propos dans le menu en haut), j'avais la version 15.2 et j'ai vu cette erreur, j'ai tout essayé que j'ai trouvé ici ou sur GitHub mais cela n'a pas résolu mon problème. Ensuite, j'ai mis à jour la version de Visual Studio et ça a fonctionné.

3 votes

J'ai ce problème avec 2017 15.9

2voto

Noni A. Points 149

Je suis en train d'utiliser Visual Studio 2017 avec une application UWP C#. J'ai rencontré cette erreur et beaucoup de mes classes ont donné cette erreur dans mon projet. Je l'ai résolue en cliquant avec le bouton droit sur le dossier Références de votre projet dans l'Explorateur de solutions et en cliquant sur "Ajouter une référence". Ensuite, j'ai choisi le bouton "Parcourir" en bas de la fenêtre contextuelle.

Cela vous amène à l'Explorateur de fichiers, et vous trouverez le bon fichier ici :

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\Microsoft\Microsoft.NET.Build.Extensions\net461\lib\netstandard.dll

ou depuis le SDK .NET Core 2.0, vous pouvez le trouver

C:\Program Files\dotnet\sdk\2.0.0\Microsoft\Microsoft.NET.Build.Extensions\net461\lib\netstandard.dll

Une fois ajouté, toutes mes erreurs ont disparu.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X