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

use*_*857 30 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()));
Run Code Online (Sandbox Code Playgroud)

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

<compilation debug="true" targetFramework="4.5">
      <assemblies>
        <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
      </assemblies>
</compilation>
Run Code Online (Sandbox Code Playgroud)

但是我收到了一个错误

错误1类型"System.Object"在未引用的程序集中定义.您必须添加对程序集'System.Runtime,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'的引用.d:....\App_Start\WebApiConfig.cs

编译器抱怨GlobalConfiguration类,上面有错误.我正在使用> .NET Framework 4.5

Was*_*der 43

我得到了同样的错误并通过做两件事来解决它.

背景:

我正在构建一个简单的测试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 };
Run Code Online (Sandbox Code Playgroud)

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

解决方案:

安装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>
Run Code Online (Sandbox Code Playgroud)

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

  • 我希望你活得像你喜欢的那样。你是我的救命恩人。 (4认同)
  • 通过 nuget 包添加“CsvHelper”会引发此错误。通过在编译标签下添加运行时程序集来解决。 (2认同)

jyr*_*kim 21

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

  <system.web>
     <compilation>
        <assemblies>
          <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
        </assemblies>
     </compilation>
  </system.web>
Run Code Online (Sandbox Code Playgroud)

以上工作.

实际上我之前已经有过一个程序集引用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>
Run Code Online (Sandbox Code Playgroud)


Jon*_*ran 7

通过Nuget安装和删除System.ValueTuple的System.ValueTyple.dll文件在我的bin文件夹中。删除它可以为我解决问题。


小智 3

\n

.NET Facades 文件夹中的其他文件也可能会导致相同的问题,并且可以使用与上述每个相关文件相同的方法进行修复。

\n\n

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

\n\n
.NET 4.5.1 \xe2\x80\x93 {ProgramFilesFolder x86 folder} \\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.5.1\\Facades\n.NET 4.5 \xe2\x80\x93 {ProgramFilesFolder x86 folder} \\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.5\\Facades\n
Run Code Online (Sandbox Code Playgroud)\n
\n\n

摘自https://web.archive.org/web/20150826050219/http://www.lyalin.com/2014/04/25/the-type-system-object-is-define-in-an- assembly-那不是参考 mvc-pcl-问题/

\n