【问题标题】:The type 'System.Object' is defined in an assembly that is not referenced类型“System.Object”在未引用的程序集中定义
【发布时间】:2014-08-15 07:27:14
【问题描述】:

我在我的项目中安装了一个 Microsoft ASP.NET Web API Compression 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 ​​类型 'System.Object' 是在一个不是 参考。您必须添加对程序集“System.Runtime”的引用, 版本=4.0.0.0,文化=中性, PublicKeyToken=b03f5f7f11d50a3a'。 D:....\App_Start\WebApiConfig.cs

编译器抱怨 GlobalConfiguration 类出现上述错误。 我正在使用 >NET Framework 4.5

【问题讨论】:

  • 它在抱怨,因为它需要 4.0 版本,而您的项目的目标是 4.5 版本。
  • @Rahul 将您的回复转换为答案以及如何解决问题的说明会很棒。

标签: asp.net


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    通过 Nuget 安装和删除 System.ValueTuple 在我的 bin 文件夹中留下了一个 System.ValueTuple.dll 文件。删除它为我解决了问题。

    【讨论】:

    • 从 System.ValueTuple 版本 4.3 移动到 4.5 解决了它。谢谢。
    • 删除这个 dll 也为我解决了这个问题 - 它已被添加到其中导致我们出现问题 - 谢谢!
    • 我将现有的已部署文件夹复制到新文件夹中。两者都有这个 dll,但只有一个新的引发了这个错误。我删除了 ValueTuple.dll 和新的工作。即使 ValueTuple.dll 存在于该文件夹中,也不知道它有多旧。
    • 哇,这个文件:System.ValueTuple.dll 导致了所有这些问题。如果我没有找到这个答案,解决这个问题会非常困难。我遇到了完全相同的情况:从 nuget 安装 ValueTuple,然后由于一些问题而将其卸载,这种情况就在那里。很难解决,因为你甚至不知道从哪里开始......
    【解决方案3】:

    .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
    

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

    【讨论】:

    • 仅供参考:上述 www.lyalin.com 的链接返回数据库错误。可能链接失效了。
    【解决方案4】:

    &lt;Reference Include="System.Runtime.Serialization" /&gt; 解决我的问题之前在csproj 文件中添加&lt;Reference Include="System.Runtime" /&gt;

    【讨论】:

      【解决方案5】:

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

      【讨论】:

      • 现在在 Build -> ASP.NET Compilation -> Enable latest...
      【解决方案6】:

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

      【讨论】:

        【解决方案7】:

        我遇到了同样的错误,并通过做两件事来解决它。

        背景:

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

        错误:

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

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

        ------ 构建开始:项目:oauth2.pylogen.com,配置:调试任何 CPU ------ 验证网站 构建目录'/App_Code/'。 E:\Projects\oauth2.pylogen.com\App_Code\Google.Api.Pylogen\FlowMetadata.cs(26,13):错误 CS0012:“System.Object”类型是在未引用的程序集中定义的。你 必须添加对程序集 'System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'。 验证完成 ========== 构建:0 成功或最新,1 失败,0 跳过 ==========

        然后我继续安装 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)。

        【讨论】:

        • 希望你能活多久。你是我的救星。
        • 通过 nuget 包添加“CsvHelper”会引发此错误。通过在编译标签下添加运行时程序集解决。
        • CSVHelper 是一个问题——升级到 4.7(所以所有项目都相同)在 NuGet 中进行了所有更新,因为混合了 4.5 版本。重建每个子项目。建了网站。都好。感谢@Wasted_Coder,非常感谢您的帮助。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-10-16
        • 2011-08-16
        • 2016-05-01
        • 2018-01-10
        • 1970-01-01
        • 1970-01-01
        • 2023-03-28
        相关资源
        最近更新 更多