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

时间:2017-06-20 11:58:32

标签: c# .net-standard .net-4.6.1

我正在使用我的类库所基于的.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类库而不会出现此类错误?

10 个答案:

答案 0 :(得分:24)

即使使用最新的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,一切都很顺利。

答案 1 :(得分:14)

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

答案 2 :(得分:12)

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

根据此GitHub issue处理类似问题,您必须手动添加对.NET Framework项目中<{1}}包的引用 for now *

通过NuGet Console安装它:

NETStandard.Library.NETFramework

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

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

或通过NuGet商店(查看显示预发布版本)并搜索Install-Package NETStandard.Library.NETFramework -Version 2.0.0-preview2-25405-01 -Pre

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

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

  

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

答案 3 :(得分:2)

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

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

答案 4 :(得分:0)

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

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

答案 5 :(得分: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>

答案 6 :(得分:0)

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

将您带到文件资源管理器,您将在这里找到正确的文件:

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

添加完之后,我所有的错误都消失了。

答案 7 :(得分:0)

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

答案 8 :(得分:0)

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

Microsoft .NET团队的项目经理Immm Landwerth,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 Standard存在几个问题   .NET Framework 4.6.1为这些版本构建的库   项目。对于需要使用此类库的.NET Framework项目,   我们建议您将项目升级到目标.NET Framework   4.7.2或更高版本。

答案 9 :(得分:0)

给出相同错误消息的另一种情况是,如果您的web.release.config文件更改了目标框架的版本。我不知道我们的项目如何以这种状态结束,但是我们进行了一次转换,使我们从4.7.2定位为4.7

import unittest
import sanity

class TestingCap(unittest.TestCase):

    def firstone(self):
        word = 'apple'
        result = sanity.firstname(word)
        self.assertEqual(result,'apple')

if __name__ == '__main__':
    unittest.main()

删除targetFramework属性(使其与我们的web.config使用的属性相同)解决了该错误