类型' System.Object'在未引用的程序集中定义

时间:2014-06-24 21:33:31

标签: asp.net

我在我的项目中安装了一个Microsoft ASP.NET Web API压缩nuget包,并在Register方法中添加了一行到WebApiconfig,如此链接所示https://www.nuget.org/packages/Microsoft.AspNet.WebApi.MessageHandlers.Compression/

 GlobalConfiguration.Configuration.MessageHandlers.Insert(0, new CompressionHandler(new GZipCompressor(), new DeflateCompressor()));

还将以下代码添加到web.config文件

<compilation debug="true" targetFramework="4.5">
      <assemblies>
        <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
      </assemblies>
</compilation>

但我收到错误

  

错误1类型&#39; System.Object&#39;在一个不是的程序集中定义   引用。您必须添加对程序集&System; System.Runtime的引用,   版本= 4.0.0.0,文化=中立,   公钥= b03f5f7f11d50a3a&#39 ;. d:.... \ App_Start \ WebApiConfig.cs

编译器抱怨GlobalConfiguration类有错误。 我使用的是&gt; .NET Framework 4.5

6 个答案:

答案 0 :(得分:33)

我遇到了同样的错误并通过做两件事来解决这个问题。

背景:

我正在构建一个简单的测试ASP.Net应用程序,以尝试使用Google API的OAuth2.0。我使用“nuget”来安装Google.Apis.Calendar.v3 (v1.13.1.509)库,它带来了许多依赖它的dll。

错误:

在Visual Studio 2015 for Web(Express)上编译一个看似简单的ASP.Net项目,目标是“Framework 4.5”。错误以两种方式表现出来:

我最初使用Build命令Ctrl+F5编译代码。然后我得到了一个构建错误,但是在“错误”选项卡中没有通常指向源代码行的条目。 (该项目将停止建设)。输出是:

------ Build started: Project: oauth2.pylogen.com, Configuration: Debug Any CPU ------
Validating Web Site
Building directory '/App_Code/'.

E:\Projects\oauth2.pylogen.com\App_Code\Google.Api.Pylogen\FlowMetadata.cs(26,13): error 
CS0012: The type 'System.Object' is defined in an assembly that is not referenced. You 
must add a reference to assembly 'System.Runtime, Version=4.0.0.0, Culture=neutral, 
PublicKeyToken=b03f5f7f11d50a3a'.
Validation Complete
========== Build: 0 succeeded or up-to-date, 1 failed, 0 skipped ==========

然后我继续安装dotNet Framework 4.6.1 Developer Pack(最新版本不是预览版)。

然后我重新启动VS 2015 for Web并再次构建。这次我在“错误”选项卡中有一个条目,指向源代码行:

flowInit.Scopes = new string[] { Google.Apis.Calendar.v3.CalendarService.Scope.Calendar };

当我注释掉这一行时,项目构建。我几乎无法对这一行做任何事情,但我只是想表明错误的默默无闻!

解决方案:

安装Framework 4.6.1 Developer Pack后。我还将此行添加到Web.Config:

<compilation debug="true" targetFramework="4.5">
  <assemblies>
    <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
  </assemblies>
</compilation>

在此之后我的项目完全构建。我的假设是Google指的是较旧的System.Runtime.dll(尽管他们的Nuget包详细信息显示目标框架是4.5)。

答案 1 :(得分:17)

这有点棘手,因为我还尝试首先将程序集引用添加到项目的根Web.config文件中,这对我的情况没有帮助。之后,我为ASP.NET MVC项目的视图 文件夹中的 Web.config 文件做了同样的事情:<强>视图\的Web.config

  <system.web>
     <compilation>
        <assemblies>
          <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
        </assemblies>
     </compilation>
  </system.web>

以上工作。

实际上我之前已经有过一个程序集引用System.Web.Mvc,所以这里是我的ASP.NET MVC项目的完整列表。

  <system.web>
    <compilation>
      <assemblies>
        <add assembly="System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
      </assemblies>
    </compilation>
  </system.web>

答案 2 :(得分:1)

  

.NET Facades文件夹中的其他文件可能是   也导致相同的问题,并将使用相同的方法来修复   如上所述,每个文件都有。

     

您可以在以下文件夹下找到相关文件   (取决于目标.NET运行时),示例:

.NET 4.5.1 – {ProgramFilesFolder x86 folder} \Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\Facades
.NET 4.5 – {ProgramFilesFolder x86 folder} \Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\Facades

摘自http://www.lyalin.com/2014/04/25/the-type-system-object-is-defined-in-an-assembly-that-is-not-reference-mvc-pcl-issue/

答案 3 :(得分:1)

我通过将C#编译器升级到Roslyn来解决了这个问题。 您可以转到Project - Enable latest C# and VB features for ASP.NET Project

来执行此操作

答案 4 :(得分:0)

<Reference Include="System.Runtime" />解决我的问题之前,在csproj文件中添加<Reference Include="System.Runtime.Serialization" />

答案 5 :(得分:0)

我只是将解决方案上的目标框架从 .NET Framework 4.5 更改为 .NET Framework 4.6.1,就成功了。