Le Type "objet" est défini dans un ensemble qui n'est pas référencé (NET Standard 2.0 / .net Framework 4.6.1)

j'utilise le .NET Standard 2.0 preview, sur lequel sont basées les bibliothèques de ma classe.

après quelques problèmes avec les paquets NuGet, notamment en ce qui concerne l'extraction des archives, j'ai décidé de migrer mes projets de Console .net Core 2.0 vers le Framework .net 4.6.1.

le .net Framework 4.6.1 est censé implémenter la spécification .NET standard 2.0 - selon différentes sources. En particulier l' dotnet / Standard GitHub Repo.

Net Standard Implementation by Net Framework and Core

malheureusement, la migration vers le Framework .NET s'est traduite par les erreurs suivantes dans tous les projets de Console Framework .NET:

erreur CS0012 le type 'Object' est défini dans un assemblage qui n'est pas référencé. Vous devez ajouter une référence à assembly 'netstandard, Version=2.0.0, Culture=neutral, PublicKeyToken = cc7b13ffcd2ddd51'.

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

Comment pourrais-je référencer les bibliothèques de classe .NET standard 2.0 avec le Framework .NET (4.6.1) sans obtenir de telles erreurs?

19
demandé sur jAC 2017-06-20 14:58:31

6 réponses

j'ai eu ce problème même après avoir utilisé le dernier 2.0, et VS 15.3. Cependant, je pense que mon problème était différent. Après la mise à niveau du noyau 1.1, à 2.0, pour une raison quelconque, my .Web. la csproj avait <RuntimeFrameworkVersion>1.1.2</RuntimeFrameworkVersion>. Ce qui a empêché le projet de cibler la version 2.0 correcte.

mes bibliothèques de classe (.Couche) projets ont <NetStandardImplicitPackageVersion>1.6.1</NetStandardImplicitPackageVersion>.

je les ai tous les deux supprimés et mon projet a finalement commencé à utiliser 2.0 et tout s'est bien passé après.

20
répondu FerX32 2017-08-21 08:39:09

après l'installation de net Core 2.0 preview 2 et la mise à jour vers la dernière version de Visual Studio 2017 Preview (15.3), les références sont maintenant automatiquement installées.

selon ceci GitHub issue, traitant d'un problème similaire, vous devez ajouter manuellement une référence à la NETStandard.Library.NETFramework colis dans votre .NET Framework projet pour l'instant*.

Soit l'installer via NuGet Console:

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

il y a quelques jours, le NET De base/Standard 2.0 aperçu 2 a été publié, si vous avez mis à 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 Pré-versions) et rechercher 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 cela plus tard.

Pour l'instant, vous devez ajouter manuellement une référence à la présente paquet qui peut être ennuyeux, mais à l'avenir, nous prévoyons de l'outillage faire cela pour vous.

8
répondu jAC 2017-06-30 15:45:29

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

mise à jour de votre version visual studio 2017 à >15.3 (check version in help->about from the top menu), j'avais la version 15.2 et en voyant cette erreur, j'ai fait tout ce que j'ai trouvé ici ou github mais n'a pas corrigé mon problème. Puis mise à jour de la version visual studio et il corrigé.

2
répondu ankur 2017-10-12 05:17:40

si vous utilisez MSBuild pour CI comme Jenkins, alors mettez à jour les outils de construction (vous pouvez le télécharger à nouveau à partir de https://www.visualstudio.com/downloads/#build-tools-for-visual-studio-2017) et assurez-vous que ".net Core build tools" est coché.

Référence: https://github.com/dotnet/standard/issues/458

0
répondu Spencer 2017-11-30 19:36:07

j'ai eu ce problème dans mon projet d'essai quand j'ai utilisé TestServer pour tester mes vues MVC.

le projet de test, le projet web et les bibliothèques associées étaient tous netcoreapp2.0.

la mise à niveau de vs2017 à 15.5 n'a pas fonctionné, et j'ai modifié mon test .csproj avec la suite des corrections suggérées ne fonctionne pas:

<RestoreProjectStyle>PackageReference</RestoreProjectStyle>

<ItemGroup><Reference Include="netstandard" /></ItemGroup>

<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>

Comme par https://github.com/aspnet/Razor/issues/1212#issuecomment-297885722 toutefois, cela a fonctionné:

  <Target Name="CopyDepsFiles" AfterTargets="Build" Condition="'$(TargetFramework)'!=''">
    <ItemGroup>
      <DepsFilePaths Include="$([System.IO.Path]::ChangeExtension('%(_ResolvedProjectReferencePaths.FullPath)', '.deps.json'))" />
    </ItemGroup>    
    <Copy SourceFiles="%(DepsFilePaths.FullPath)" DestinationFolder="$(OutputPath)" Condition="Exists('%(DepsFilePaths.FullPath)')" />
  </Target>
0
répondu user326608 2017-12-07 03:30:32

essayez d'ajouter une référence netstandard dans web.config comme ceci:

<system.web> 
   <compilation debug="true" targetFramework="4.7.1" > 
      <assemblies> 
         <add assembly="netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51"/> 
      </assemblies> 
    </compilation> 
</system.web>
0
répondu OMID 2018-09-17 05:49:02