web-dev-qa-db-fra.com

Le type 'Object' est défini dans un assembly 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 mes bibliothèques de classes sont basées.

Après des problèmes avec quelques paquets NuGet, notamment en ce qui concerne l'extraction d'archive, j'ai décidé de faire migrer mes projets de console .NET Core 2.0 vers .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. Surtout le dotnet/standard GitHub Repo .

 Net Standard Implementation by Net Framework and Core

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

Erreur CS0012 Le type 'Object' est défini dans un assembly non référencé. Vous devez ajouter une référence à la norme Net Assembly de la version = 2.0.0.0, Culture = neutre, PublicKeyToken = cc7b13ffcd2ddd51 '.

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

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

24
jAC

J'ai eu 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 à 2.0, pour une raison quelconque, le fichier .csproj de mon site Web avait <RuntimeFrameworkVersion>1.1.2</RuntimeFrameworkVersion>. Ce qui a empêché le projet de cibler la version 2.0 correcte. 

Mes projets de bibliothèques de classes (.Layer) avaient <NetStandardImplicitPackageVersion>1.6.1</NetStandardImplicitPackageVersion>.

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

22
FerX32

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

Selon ce problème de GitHub , traitant un problème similaire, vous devez ajouter manuellement une référence au package NETStandard.Library.NETFramework dans votre projet .NET Framework pour l'instant *.

Installez-le via la console NuGet:

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

Il y a quelques jours, l'aperçu 2 de NET Core/Standard 2.0 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 versions préliminaires) et recherchez NETStandard.Library.NETFramework

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

* Joperezr indique que Microsoft envisage de laisser un outil gérer cela plus tard.

Pour le moment, vous devez ajouter manuellement une référence à ce paquet, ce qui peut être gênant, mais à l'avenir, nous prévoyons utiliser cet outil pour vous.

12
jAC

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

<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>
9
OMID

Juste au cas où certaines personnes ont toujours ce problème comme moi

mettez à jour votre version de Visual Studio 2017 vers> 15.3 (consultez la version dans aide-> à propos du menu supérieur), j'avais la version 15.2 et, voyant cette erreur, j'ai fait tout ce que j'ai trouvé ici ou github mais je n'ai pas résolu mon problème. Puis mis à jour la version de Visual Studio et corrigé.

2
ankur

J'ai moi-même eu cette exception lorsque j'ai déplacé physiquement un projet dans un sous-dossier, provoquant la rupture des références au package NuGet (indications de chemin). Après les avoir corrigés dans le fichier csproj, tout était revenu à la normale.

0
DotBert

J'utilise Visual Studio 2017 avec une application C # UWP. J'ai eu cette erreur et beaucoup de mes cours ont donné cette erreur dans mon projet. Je l'ai corrigé en faisant un clic 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.

Cela vous amène à File Explorer, et vous trouverez le bon fichier ici:

C:\Program Files (x86)\Microsoft Visual Studio\2017\Communauté\MSBuild\Microsoft\Microsoft.NET.Build.Extensions\net461\lib\netstandard.dll ou à partir du SDK .NET Core 2.0, vous le trouverez C:\Program Files\dotnet\sdk\2.0.0\Microsoft\Microsoft.NET.Build.Extensions\net461\lib\netstandard.dll 

Une fois que je l'ai ajouté, toutes mes erreurs ont disparu.

0
Azurespot

Si vous utilisez MSBuild for CI comme Jenkins, 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
Spencer

J'avais ce problème dans mon projet de test lorsque je utilisais 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 vers la version 15.5 n'a pas fonctionné et la modification de mon test .csproj avec les correctifs suggérés suivants n'a pas fonctionné:

<RestoreProjectStyle>PackageReference</RestoreProjectStyle>

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

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

Selon https://github.com/aspnet/Razor/issues/1212#issuecomment-297885722 cependant, 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
user326608