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

jAC*_*jAC 34 .net c# .net-4.6.1 .net-standard

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

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

根据不同的来源,.NET Framework 4.6.1应该实现.NET Standard 2.0规范.特别是dotnet /标准GitHub Repo.

Net Framework和Core的净标准实施

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

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

在哪里Object可以是任何东西:Enum,Task,...

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

Fer*_*X32 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,一切都很顺利.

  • @Hudgi很高兴它为你工作而不删除它.但是,在我看来,你说你想在你的项目中使用2.0.因此,如果您将其更新为...将来说2.1,您可能会遇到同样的问题.我相信如果你删除RuntimeFrameworkVersion,.Core将使用最新的可用版本. (3认同)

OMI*_*MID 23

尝试在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>
Run Code Online (Sandbox Code Playgroud)


jAC*_*jAC 12

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

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

通过NuGet控制台安装它:

Install-Package NETStandard.Library.NETFramework -Version 2.0.0-preview1-25305-02 -Pre
Run Code Online (Sandbox Code Playgroud)

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

Install-Package NETStandard.Library.NETFramework -Version 2.0.0-preview2-25405-01 -Pre
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

  • 据我所知,在没有安装完整Visual Studio的情况下构建CI服务器仍然需要这样做. (3认同)

Ste*_*edy 6

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

微软 .NET 团队的项目经理 Immo Landwerth 在推特上写道

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

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

.NET标准的可比性矩阵已更新与4.6.1脚注内容如下:

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