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.
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'.
Où 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?
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.
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.
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é.
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é.
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>
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>