【问题标题】:Predefined type 'System.Object' is not defined or imported .net 4.6预定义类型“System.Object”未定义或导入.net 4.6
【发布时间】:2015-09-22 07:44:18
【问题描述】:

我正在使用 MVC 5 和 .net 4.6 创建我的移动应用也可以连接的 Web API。

每当我构建项目时,我都会收到数百个错误,告诉我需要添加已经存在的引用,并且实际上我的项目中的每种类型都“不存在”。这些错误的一些示例:(不包括标题中的错误)

我尝试过的:

  • 通过 nuGet 添加了对 System.Runtime 的引用。 (来自this question 的推荐。)
  • 从 project.json 文件中的框架中删除了 aspnetcore50。 (另一个建议,this question。)
  • 重启VS2015,我的机器。
  • 通过 nuGet 包管理器并将我项目中的每个包升级到最新版本。
  • 实际上确保我可以在解决方案资源管理器的引用节点中看到引用。

更新: - 我的project.json 文件如下所示。 (根据 Karls 的回答修改后。错误列表现在减少到了 10 个,但仍然是和以前一样的错误。)

{
  "commands": {
    "web": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.WebListener --server.urls http://localhost:5000"
  },
  "dependencies": {
    "Microsoft.AspNet.Server.IIS": "1.0.0-beta5",
    "Microsoft.AspNet.Server.WebListener": "1.0.0-beta5",
    "Microsoft.AspNet.Diagnostics": "1.0.0-beta5",
    "Microsoft.AspNet.Mvc": "6.0.0-beta5",
    "System.Runtime": "4.0.20-beta-23019"
  },
  "exclude": [
    "wwwroot",
    "node_modules",
    "bower_components"
  ],
  "frameworks": {
    "dnx451": {
      "frameworkAssemblies": {
        "System.Data": "4.0.0.0",
        "System.Data.DataSetExtensions": "4.0.0.0",
        "System.Data.Linq": "4.0.0.0"
      }
    }
  },
  "publishExclude": [
    "node_modules",
    "bower_components",
    "**.xproj",
    "**.user",
    "**.vspscc"
  ],
  "version": "1.0.0-*",
  "webroot": "wwwroot"
}

【问题讨论】:

  • 你可以同时删除 aspnet50aspnetcore50,它们在 beta3 中被重命名为 dnx/dnxcore 之类的,现在已经没用了(除非它们以某种方式干扰其他的,如果是这样的话,它们都是无用且有害)。
  • 去掉这两个,错误列表减少到450,越来越好!

标签: c# asp.net .net json asp.net-mvc


【解决方案1】:

删除 binobj 并重建。

【讨论】:

  • 谢谢你的工作,我还需要卸载和重新加载项目。
  • 救命稻草。我在 docker 容器中遇到了这个问题
  • 请说明当有人删除这些文件夹时可能会发生什么变化?
  • 这对我有用一次,然后@Tharindu Jayasinghe 的回答对我有用......
  • 此外,我必须在之后清理和构建解决方案。
【解决方案2】:

这浪费了我很多时间。关闭视觉工作室。删除 .vs 文件夹并重新启动 Visual Studio。一切都应该正常。

这通常发生在您更改分支或合并分支时。

【讨论】:

  • 我的 applicationhot.config 文件中有一些我不想丢失的东西,所以我所做的就是关闭 VS,删除 .suo 文件,然后重新启动 VS,这对我也有用.
  • 快速、美观、安静
  • 一个类似的解决方案为我解决了这个问题 - 我已经从 .vs 目录中删除了 DesignTimeBuild 目录(符号缓存)(删除 .suo 文件会丢失解决方案级别的设置、断点等)。当然,我还删除了binobj 目录。手动将项目转换为新型 csproj 并删除解决方案配置后发生错误。另见stackoverflow.com/questions/50343456/…
  • 请说明删除该文件夹后可能发生的变化
  • 刚刚关闭并重新打开 VS 对我有用(这些年来解决了多少问题?)
【解决方案3】:

我在包管理器控制台上运行dotnet restore 命令并解决了问题。

【讨论】:

  • 尽管问题在于缺少命令没有帮助的软件包。实际上,我注意到有些东西阻止了 PackageManager 解析 nuget.org 源,它试图在没有所需框架的情况下构建(在我的例子中是 Microsoft.Net.Test.Sdk 和 Microsoft.NETCore.UniversalWindowsPlatform)。为了解决这个问题,我必须检查被禁用的代理以及任何 VPN 连接,并从头开始重新创建测试项目,所以只有这样它才会自动安装所有必需的包。
【解决方案4】:

我遇到了同样的问题。我花了两天时间试图解决这个问题。我尝试重新安装 Visual Studio,清除 Visual Studio 缓存,卸载 Visual Studio 或再次安装 Windows 10 => 但没有成功。

您可以尝试按照对我有用的步骤:

  1. 关闭 Visual Studio
  2. 删除解决方案文件夹中的packages文件夹
  3. 打开 Visual Studio 并重建解决方案

祝你好运

【讨论】:

  • 刚刚重启 VS 对我有用,谢谢 :)。
【解决方案5】:

我刚刚以“管理员身份”打开了 Visual Studio,它工作正常!

【讨论】:

    【解决方案6】:

    我在这里猜测了一下,但您使用常规的 System.Data.* 东西来代替 dnx451 看起来很可疑,但没有任何东西可以弥补 dnxcore50 的不足。您是否也针对核心版本,或者它只是项目创建的剩余部分?如果您想定位核心版本并仍然使用旧的 System.Data.* 东西,您需要像这样包装这些程序集中的任何内容。

    #if DNX451
    // Do some DNX451 specific stuff here
    #endif
    

    反之亦然。

    #if DNXCORE50
    // Do some DNXCORE50 specific stuff here
    #endif
    

    但如果您还没有考虑支持这一点,我会简单地从框架列表中删除 dnxcore50,您的错误可能会消失。

    【讨论】:

    • 它们只是项目创建的剩余部分,消除了大部分错误,谢谢。还剩10个!唯一的问题是错误仍然像上面描述的那样,即)未定义或导入预定义类型'System.String'
    • 如果您删除了dnxcore50,这些错误不应该仍然存在,因为它们是简单的内置类型。在dnxcore 中,您可能需要导入它们(但是一旦您添加了一些其他包,您就会隐式地获得引用,因此您通常不会手动添加它)。您是在运行 VS 2015 RC(候选发布版)还是仍在使用其中一个 beta 版本?
    • 我已经更新了我的问题,以显示我的文件在您更新后的状态。我也在运行 VS2015 RC。
    • 啊,删除 DNXCORE50 将错误列表减少到 10 个,重新启动然后将其减少到 4 个。删除我之前添加的 System.Runtime 引用,然后删除所有错误...谢谢!
    • 很高兴听到。正如我之前所说,System.Runtime 几乎总是会包含在另一个程序集中,因此除非您制作一些非常基本的东西(即甚至没有 Console.WriteLine),否则您不需要自己包含它。可能是要记住的东西:)
    【解决方案7】:

    就我而言,我有一个项目仍然设置为针对 dnx 的 beta 版本进行构建。将其更改为针对我在其他项目中使用的版本进行构建已修复它。

    【讨论】:

      【解决方案8】:

      就我而言,以下是我遵循的步骤;

      1. 我删除了 bin 和 obj 并重建。 (没用)
      2. 已卸载项目。 (导致“找不到资产文件 project.assets.json。运行 NuGet 包还原”)
      3. 我通过 Visual Studio 2017 >> 工具 >> NuGet 包管理器 >> 包管理器控制台运行了 dotnet restore 命令。
      4. 重建解决方案。 (问题已解决)

      【讨论】:

        【解决方案9】:

        花了将近 2 天的时间来修复。尝试了 VS 卸载\重新安装 多次,但没有成功。

        最后什么对我有用...

        运行 VS 安装程序修复。 由于错误,我不得不手动卸载所有实例 MS .NET Core SDK - 2.1xxx

        运行 VS 安装程序修复。 没有错误。 移除 binobjrebuild

        在包管理器控制台上运行dotnet restore 命令并解决问题。

        【讨论】:

          【解决方案10】:

          VS2019 解决方案文件被放置在一个驱动器文件夹下,移动到一个驱动器之外的另一个文件夹,修复了这个问题。

          【讨论】:

            【解决方案11】:

            对我来说,当我向我的解决方案中添加一个新项目时,问题就出现了。我重新构建了解决方案,错误消失了。

            【讨论】:

              【解决方案12】:

              就我而言,这是不同的。 首先检查 System.Runtime 引用是否添加到您的项目中。如果将其添加到您的项目中,请按照以下步骤操作。

              1. 从您的项目中打开您的参考并选择 System.Runtime 程序集。
              2. 右键单击 System.Runtime 并选择属性。
              3. SpecificVersion 的值从 False 更改为 True。

              注意:就我而言,我使用的是 Visual Studio 2019Project Framework Version - 4.6.2

              【讨论】:

                【解决方案13】:

                我也在使用 Visual Studio 2019 并从 Google/Git 加载解决方案时收到了这个问题。当我的解决方案加载时,输出选项卡(来自包管理器)指出该文件夹不存在:google-api-dotnet-client\NuPkgs\Support。我添加了 NuPkgs 文件夹,然后在 NuPckgs 中添加了 Support 并重新启动 Visual Studio,然后所有项目都恢复了。这解决了我的问题。

                检查输出选项卡(来自包管理器)以确保您的项目成功恢复。

                【讨论】:

                  【解决方案14】:

                  这些错误是否仅在视图 (.cshtml) 文件打开时出现,而在文件关闭或选项卡关闭时消失?

                  MVC5 定义 .cshtml razor 文件的全局引用,以假定所有视图。在此处检查:项目 -> 视图 -> web.config(不要与项目 -> web.config 文件混淆。system.web.webPages.razor 部分定义了引用:

                  <configuration>
                    ...
                    <system.web.webPages.razor>
                      <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc,
                          Version=5.2.7.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
                      <pages pageBaseType="System.Web.Mvc.WebViewPage">
                        <namespaces>
                          <add namespace="System.Web.Mvc" />
                          <add namespace="System.Web.Mvc.Ajax" />
                          <add namespace="System.Web.Mvc.Html" />
                          <add namespace="System.Web.Optimization"/>
                          <add namespace="System.Web.Routing" />
                        </namespaces>
                      </pages>
                    </system.web.webPages.razor>
                    ...
                  

                  但是,如果此项目 -> 视图 -> web.config 文件丢失,这可能是设计使然,或者不是必需的。我有一个项目,当将其部署到一个更大的顶级站点中时,该站点定义了这些引用,因此在运行时这些错误被清除。我学会了忽略并关闭 .cshtml 文件或选择非 .cshtml 文件。

                  可以获取顶层视图的副本 -> web.config 文件并将其添加到您的解决方案中。我认为发布时文件将被忽略,但我不确定这种行为。

                  【讨论】:

                    【解决方案15】:

                    我的情况:我正在使用 .NET Framework 4.5 在 VS 2019 中进行开发。我添加了一个类库,并在生成的类上收到 Predefined type 'System.Object' is not defined 消息。

                    努力:

                    • 删除了 bin 和 obj 文件夹,并重新构建。没有变化。
                    • 在包管理器控制台中运行 dotnet restore。运行完成,说没有什么可做的。没有变化。

                    我的解决方案:我卸载了项目并重新加载了依赖项。当我重建时,错误消失了。

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 2019-03-23
                      • 1970-01-01
                      • 1970-01-01
                      • 2019-08-17
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2016-11-17
                      相关资源
                      最近更新 更多