Type 'Object' is defined in an assembly that is not referenced (NET Standard 2.0/.NET Framework 4.6.1)

55,241

Solution 1

Try to add a reference to netstandard in web.config as below:

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

Solution 2

I had this problem even after using the latest 2.0, and VS 15.3. However, I think my problem was different. After upgrading from Core 1.1, to 2.0, for some reason, my .web's .csproj had <RuntimeFrameworkVersion>1.1.2</RuntimeFrameworkVersion>. Which prevented the project from targeting the correct 2.0 version.

My class libraries (.Layer) projects had <NetStandardImplicitPackageVersion>1.6.1</NetStandardImplicitPackageVersion>.

I deleted both of them and my project finally started using 2.0 and everything went fine after.

Solution 3

After installing NET Core 2.0 preview 2 and updating to the latest version of Visual Studio 2017 Preview (15.3), the references are now automatically installed.

According to this GitHub issue, dealing with a similar problem, you have to manually add a reference to the NETStandard.Library.NETFramework package within your .NET Framework project for now*.

Either install it via NuGet Console:

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

A few days ago, the NET Core/Standard 2.0 preview 2 was released, if you updated, the following version is needed:

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

or via the NuGet store (check Show Pre-release versions) and search for NETStandard.Library.NETFramework

This will then resolve the references, the errors should vanish.

*Joperezr states that Microsoft is planning to let a tool handle this later.

For now you have to manually add a reference to this package which can be annoying, but in the future we are planning on the tooling doing this for you.

Solution 4

It's good to hear that for many people updates to Visual Studio resolved their issues; however, it is worth pointing out that it is no longer recommended to try to consume .NET Standard 2.0 libraries from .NET Framework 4.6.1 projects because of bugs and other issues. You should use 4.7.2 or newer instead, where possible.

Immo Landwerth, Program Manager on the .NET team at Microsoft, tweeted:

Sorry but we messed up. We tried to make .NET Framework 4.6.1 retroactively implement .NET Standard 2.0. This was a mistake as we don't have a time machine and there is a tail of bugs.

If you want to consume .NET Standard 1.5+ from .NET Framework, I recommend to be on 4.7.2.

The .NET Standard comparability matrix has been updated with a footnote for 4.6.1 which reads:

The versions listed here represent the rules that NuGet uses to determine whether a given .NET Standard library is applicable. While NuGet considers .NET Framework 4.6.1 as supporting .NET Standard 1.5 through 2.0, there are several issues with consuming .NET Standard libraries that were built for those versions from .NET Framework 4.6.1 projects. For .NET Framework projects that need to use such libraries, we recommend that you upgrade the project to target .NET Framework 4.7.2 or higher.

Solution 5

Just in case some persons still having this issue like me

update your visual studio 2017 version to >15.3 (check version in help->about from the top menu), i had version 15.2 and seeing this error, i did everything i found over here or github but didnt fixed my issue. Then updated visual studio version and it fixed.

Share:
55,241
jAC
Author by

jAC

Working as a software architect for cloud-native automotive applications. Mostly code in java on amazon-web-services's cloud platform. Did my Bachelor's degree at the University of Applied Sciences Esslingen, currently doing my Master's degree in parallalel at the FOM Stuttgart. Learning java at school and personally starting with c# a few years ago, I mainly use java with frameworks like spring-boot or quarkus to write and integrate microservices.

Updated on July 09, 2022

Comments

  • jAC
    jAC almost 2 years

    I'm using the .NET Standard 2.0 preview, on which my Class Libraries are based.

    After having trouble with a few NuGet packages, especially regarding archive extraction, I decided to migrate my .NET Core 2.0 Console projects back to the .NET Framework 4.6.1.

    The .NET Framework 4.6.1 is supposed to implement the .NET Standard 2.0 specification - according to different sources. Especially the dotnet/standard GitHub Repo.

    Net Standard Implementation by Net Framework and Core

    Unfortunately, the migration to the .NET Framework resulted in the following errrors throughout all of .NET Framework Console projects:

    Error CS0012 The type 'Object' is defined in an assembly that is not referenced. You must add a reference to assembly 'netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'.

    Where Object can be anything: Enum, Task, ...

    How would I reference .NET Standard 2.0 class libraries with .NET Framework (4.6.1) without getting such errors?

  • jAC
    jAC almost 7 years
    I don't know, whether I'm the only one with that problem, so I thought I'd share this by self-answering
  • Martin Ullrich
    Martin Ullrich almost 7 years
    this should be fixed in the upcoming preview2 release and a VS 15.3 preview update that include the necessary logic, no longer requiring this nuget package
  • jAC
    jAC almost 7 years
    @MartinUllrich: All right, thanks for the info. Then my answer is (nearly/already) outdated ... I'll keep the question open until the new release of the VS preview and delete it then.
  • Marcin
    Marcin over 6 years
    I had same doubt about RuntimeFrameworkVersion, after removing it, errors gone
  • Manfred
    Manfred over 6 years
    Valid question for .NET Core/Standard 2.0 release version as well. Error is present when building with script using msbuild. Compiles fine with VS 2017 (15.3), though. Library targeting net461 should be able to use netstandard2.0 libraries but is not.
  • Taylor Buchanan
    Taylor Buchanan over 6 years
    As far as I can tell, this is still necessary to build on a CI server without full Visual Studio installed.
  • Hudgi
    Hudgi over 6 years
    Correct, I had a very similar problem. I have used this tutorial for migrating my project from 1.1 to 2.0 but it failed to compile with a bunch of the same error messages as the OP reported. Finally I had to modify RuntimeFrameworkVersion from 1.6.1 to 2.0 and the problem was solved. Note that I did not delete this node.
  • Nitin Sawant
    Nitin Sawant over 6 years
    Even after adding the reference to above package to all projects in solution I get lot of this kind of issues Multiple assemblies with equivalent identity have been imported: 'D:\Projects\3.1.2\src\packages\NETStandard.Library.NETFrame‌​work.2.0.0-preview2-‌​25405-01\build\net46‌​1\ref\System.Text.En‌​coding.Extensions.dl‌​l' and 'C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Facades\‌​System.Text.Encoding‌​.Extensions.dll'. Remove one of the duplicate references
  • FerX32
    FerX32 almost 6 years
    @Hudgi glad it worked for you without deleting it. However, in my opinion, you are saying you want to use 2.0 on your project. So, if you update it to... say 2.1 in the future, you might run into the same problem. I believe if you delete RuntimeFrameworkVersion, .Core will use the latest available version.
  • AxelWass
    AxelWass over 5 years
    @TaylorBuchanan your comment saved my day.
  • Alisson Reinaldo Silva
    Alisson Reinaldo Silva over 5 years
    @Hudgi I had the same problem you had. I just deleted this tag and it worked.
  • N73k
    N73k almost 5 years
    I have this problem with 2017 15.9
  • gls123
    gls123 almost 4 years
    Thanks, this saved me loads of time