A fter referencing a .NET Standard 2.0 project in a .NET 4.8 ASP.NET MVC project, the project failed ant runtime with the following error message:
CS0012: The type 'System.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'.
Whoops! Let me explain how I fixed the problem.
The solution – Part I
I first tried to add the NETStandard.Library nuget package to the .NET 4.8 project but that didn’t made the error disappear.(Although I come back to this in Part II below).
So I removed the nuget package again and instead I did the following:
- I manually edited the csproj file and added the following reference:
<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | |
<ItemGroup> | |
<Reference Include="netstandard" /> | |
</ItemGroup> | |
</Project> |
- I also updated the reference and set Copy Local=true
After doing that the error disappeared and the application ran successfully on my local machine.
Victory…
… or not? After committing the updated project, a colleague contacted me that he wasn’t able to compile it on his machine as Visual Studio complained that he couldn’t find the netstandard reference.
The solution – Part II
The solution was to move back to my original attempt and also add the NETStandard.Library nuget package to the .NET 4.8 project:
<?xml version="1.0" encoding="utf-8"?> | |
<packages> | |
<package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="2.0.1" targetFramework="net48" /> | |
<package id="Microsoft.NETCore.Platforms" version="1.1.0" targetFramework="net48" /> | |
<package id="NETStandard.Library" version="2.0.3" targetFramework="net48" /> | |
</packages> |
That finally fixed the problem…