类型'Object'在未引用的程序集中定义(NET Standard 2.0 / .NET Framework 4.6.1)

问题描述 投票:27回答:8

我正在使用我的类库所基于的.NET Standard 2.0预览版。

在使用一些NuGet包时遇到问题,特别是关于存档提取,我决定将我的.NET Core 2.0控制台项目迁移回.NET Framework 4.6.1。

根据不同的来源,.NET Framework 4.6.1应该实现.NET Standard 2.0规范。尤其是dotnet/standard GitHub Repo

Net Standard Implementation by Net Framework and Core

遗憾的是,迁移到.NET Framework导致所有.NET Framework Console项目出现以下错误:

错误CS0012类型“对象”在未引用的程序集中定义。您必须添加对程序集'netstandard,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = cc7b13ffcd2ddd51'的引用。

哪里Object可以是任何东西:EnumTask,...

如何在不出现此类错误的情况下使用.NET Framework(4.6.1)引用.NET Standard 2.0类库?

c# .net-standard .net-4.6.1
8个回答
26
投票

即使在使用最新的2.0和VS 15.3之后我也遇到了这个问题。但是,我认为我的问题不同了。从Core 1.1升级到2.0后,出于某种原因,我的.web的.csproj有<RuntimeFrameworkVersion>1.1.2</RuntimeFrameworkVersion>。这阻止了该项目瞄准正确的2.0版本。

我的类库(.Layer)项目有<NetStandardImplicitPackageVersion>1.6.1</NetStandardImplicitPackageVersion>

我删除了他们两个,我的项目最终开始使用2.0,一切都很顺利。


20
投票

尝试在web.config中添加对netstandard的引用,如下所示:

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

12
投票

安装NET Core 2.0预览版2并更新到最新版本的Visual Studio 2017 Preview(15.3)后,现在会自动安装引用。

根据这个处理类似问题的GitHub issue,您必须在.NET Framework项目中手动添加对NETStandard.Library.NETFramework包的引用。

通过NuGet控制台安装它:

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

几天前,.NET Core / Standard 2.0预览版2发布了,如果您更新,则需要以下版本:

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

或通过NuGet商店(查看显示预发布版本)并搜索NETStandard.Library.NETFramework

这将解析引用,错误应该消失。

* Joperezr表示微软计划让一个工具稍后处理。

现在你必须手动添加对这个包的引用,这可能很烦人,但是将来我们正计划为你做这个工具。


2
投票

以防有些人像我一样有这个问题

将您的Visual Studio 2017版本更新为> 15.3(检查版本的帮助 - >从顶部菜单开始),我有版本15.2并看到此错误,我做了我在这里找到的所有内容或github但没有解决我的问题。然后更新了visual studio版本并修复了它。


1
投票

我正在使用Visual Studio 2017和C#UWP应用程序。我有这个错误,我的很多课程都在我的项目中出现了这个错误。我通过在解决方案资源管理器中右键单击项目的References文件夹并单击“添加引用”来修复它。然后我选择了弹出窗口底部的“浏览”按钮。

它将您带到文件资源管理器,您将在此处找到正确的文件:

C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Community \ MSBuild \ Microsoft \ Microsoft.NET.Build.Extensions \ net461 \ lib \ netstandard.dll或者从.NET Core 2.0 SDK中可以找到它C: \ Program Files \ dotnet \ sdk \ 2.0.0 \ Microsoft \ Microsoft.NET.Build.Extensions \ net461 \ lib \ netstandard.dll

一旦我添加它,我的所有错误都消失了。


0
投票

如果您正在使用像Jenkins这样的CI的MSBuild,那么请更新构建工具(您可以从https://www.visualstudio.com/downloads/#build-tools-for-visual-studio-2017再次下载)并确保选中“.NET Core构建工具”。

参考:https://github.com/dotnet/standard/issues/458


0
投票

当我使用TestServer来测试我的MVC视图时,我在测试项目中遇到了这个问题。

测试项目,Web项目和相关库都是netcoreapp2.0

将vs2017升级到15.5不起作用,并使用以下建议的修复程序编辑我的测试.csproj不起作用:

<RestoreProjectStyle>PackageReference</RestoreProjectStyle>

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

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

然而,根据https://github.com/aspnet/Razor/issues/1212#issuecomment-297885722,这有效:

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

在将项目物理移动到子文件夹时,我自己有这个例外,导致NuGet包引用(路径提示)被破坏。将它们修复到csproj文件后,一切都恢复正常了。


0
投票

很高兴听到很多人对Visual Studio的更新解决了他们的问题;但是,值得指出的是,由于存在错误和其他问题,不再建议尝试从.NET Framework 4.6.1项目中使用.NET Standard 2.0库。在可能的情况下,您应该使用4.7.2或更高版本。

Immo Landwerth,微软.NET团队项目经理,tweeted

对不起,但我们搞砸了。我们尝试使.NET Framework 4.6.1追溯性地实现.NET Standard 2.0。这是一个错误,因为我们没有时间机器,并且有一堆错误。

如果您想从.NET Framework使用.NET Standard 1.5+,我建议使用4.7.2。

.NET Standard comparability matrix已更新为4.6.1的脚注,内容如下:

此处列出的版本表示NuGet用于确定给定.NET标准库是否适用的规则。虽然NuGet认为.NET Framework 4.6.1支持.NET Standard 1.5到2.0,但是使用.NET Framework 4.6.1项目中为这些版本构建的.NET标准库存在一些问题。对于需要使用此类库的.NET Framework项目,我们建议您将项目升级到.NET Framework 4.7.2或更高版本。

© www.soinside.com 2019 - 2024. All rights reserved.