可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
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.
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?
回答1:
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.
回答2:
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.
回答3:
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>
回答4:
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.
回答5:
If you are using MSBuild for CI like Jenkins, then update the build tools (you can download it again from https://www.visualstudio.com/downloads/#build-tools-for-visual-studio-2017) and make sure ".NET Core build tools" is checked.
Reference: https://github.com/dotnet/standard/issues/458
回答6:
I had this issue in my test project when using TestServer
to test my MVC views.
The test project, web project and associated libraries were all netcoreapp2.0
.
Upgrading vs2017 to 15.5 did not work, and editing my test .csproj with the following suggested fixes did not work:
<RestoreProjectStyle>PackageReference</RestoreProjectStyle>
<ItemGroup><Reference Include="netstandard" /></ItemGroup>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
As per https://github.com/aspnet/Razor/issues/1212#issuecomment-297885722 however, this worked:
<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>
回答7:
I'm using Visual Studio 2017 with a C# UWP app. I had this error and a lot of my classes gave this error in my project. I fixed it by right-clicking on the References folder of your project in Solution Explorer and clicking "Add reference". Then I chose the "Browse" button at the bottom of the popup.
It takes you to File Explorer, and you will find the right file here:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\Microsoft\Microsoft.NET.Build.Extensions\net461\lib\netstandard.dll or from the .NET Core 2.0 SDK you can find it C:\Program Files\dotnet\sdk\2.0.0\Microsoft\Microsoft.NET.Build.Extensions\net461\lib\netstandard.dll
Once I added it, all my errors went away.
回答8:
I had this exception myself when physically moving a project into a sub folder, causing the NuGet package references (path hints) being broken. After fixing them in the csproj file, everything was back to normal again.