C# 类型';对象';在未引用的程序集中定义(NET标准2.0/.NET Framework 4.6.1)

C# 类型';对象';在未引用的程序集中定义(NET标准2.0/.NET Framework 4.6.1),c#,.net,.net-standard,.net-4.6.1,C#,.net,.net Standard,.net 4.6.1,我正在使用预览,我的类库就是基于预览的 在使用了一些NuGet软件包(特别是关于归档提取)后,我决定将我的.NET Core 2.0控制台项目迁移回.NET Framework 4.6.1 根据不同的来源,.NET Framework 4.6.1应该实现.NET标准2.0规范。尤其是 不幸的是,迁移到.NET Framework会在所有.NET Framework控制台项目中导致以下错误: 错误CS0012在未引用的程序集中定义了类型“Object”。必须添加对程序集“netstandard,

我正在使用预览,我的类库就是基于预览的

在使用了一些NuGet软件包(特别是关于归档提取)后,我决定将我的.NET Core 2.0控制台项目迁移回.NET Framework 4.6.1

根据不同的来源,.NET Framework 4.6.1应该实现.NET标准2.0规范。尤其是

不幸的是,迁移到.NET Framework会在所有.NET Framework控制台项目中导致以下错误:

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

其中
对象
可以是任何内容:
枚举
任务

如何使用.NET Framework(4.6.1)引用.NET标准2.0类库而不出现此类错误?

在安装了NET Core 2.0 preview 2并更新到最新版本的Visual Studio 2017 preview(15.3)后,现在将自动安装引用。 根据这一点,处理类似的问题时,您现在必须在.NET Framework项目中手动添加对
NETStandard.Library.NETFramework
包的引用

通过NuGet控制台安装:

Install-Package NETStandard.Library.NETFramework -Version 2.0.0-preview1-25305-02 -Pre
几天前,NET Core/Standard 2.0 preview 2发布,如果您进行了更新,则需要以下版本:

Install-Package NETStandard.Library.NETFramework -Version 2.0.0-preview2-25405-01 -Pre
或者通过NuGet商店(选中“显示预发布版本”),搜索
NETStandard.Library.NETFramework

这将解决引用问题,错误将消失

*声明微软计划稍后让一个工具来处理这个问题

现在,您必须手动添加对此包的引用,这可能会很烦人,但在将来,我们计划使用工具为您执行此操作


即使在使用了最新的2.0和VS 15.3之后,我也遇到了这个问题。然而,我认为我的问题是不同的。在从Core1.1升级到2.0之后,出于某种原因,my.web的.csproj拥有
1.1.2
。这使项目无法以正确的2.0版本为目标

我的类库(.Layer)项目有
1.6.1


我删除了它们,我的项目最终开始使用2.0,之后一切都很好

以防万一像我这样的人还有这个问题


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

如果像Jenkins一样使用针对CI的MSBuild,请更新生成工具(可以从中再次下载),并确保选中“.NET核心生成工具”


参考资料:

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

测试项目、web项目和相关库都是
netcoreapp2.0

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

PackageReference

然而,这是有效的:

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

尝试在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>

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

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

C:\ProgramFiles(x86)\Microsoft Visual Studio\2017\Community\MSBuild\Microsoft\Microsoft.NET.Build.Extensions\net461\lib\netstandard.dll

或者从.NET Core 2.0 SDK中可以找到它

C:\ProgramFiles\dotnet\sdk\2.0.0\Microsoft\Microsoft.NET.Build.Extensions\net461\lib\netstandard.dll


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

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

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

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

对不起,我们搞砸了。我们试图使.NET Framework 4.6.1追溯性地实现.NET标准2.0。这是一个错误,因为我们没有时间机器,而且有很多错误

如果您想使用.NET Framework中的.NET标准1.5+,我建议使用4.7.2

更新了4.6.1的脚注,内容如下:

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


另一个给出相同错误消息的场景是web.release.config文件更改了版本
<compilation xdt:Transform="Replace" targetFramework="4.7" batch="true"
                 enablePrefetchOptimization="true" optimizeCompilations="true" />