预定义类型“System.Object”未定义或导入.net 4.6

Posted

技术标签:

【中文标题】预定义类型“System.Object”未定义或导入.net 4.6【英文标题】:Predefined type 'System.Object' is not defined or imported .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,越来越好! 【参考方案1】:

删除 binobj 并重建。

【讨论】:

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

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

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

【讨论】:

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

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

【讨论】:

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

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

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

    关闭 Visual Studio 删除解决方案文件夹中的packages文件夹 打开 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】:

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

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

【讨论】:

【参考方案9】:

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

最后什么对我有用...

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

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

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

【讨论】:

【参考方案10】:

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

【讨论】:

【参考方案11】:

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

【讨论】:

【参考方案12】:

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

    从您的项目中打开您的参考并选择 System.Runtime 程序集。 右键单击 System.Runtime 并选择属性。 将 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。运行完成,说没有什么可做的。没有变化。

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

【讨论】:

以上是关于预定义类型“System.Object”未定义或导入.net 4.6的主要内容,如果未能解决你的问题,请参考以下文章

预定义类型“System.Object”未定义或导入.net 4.6

编译的单声道丢失默认.NET库 - 未定义或导入System.Object

c++可以“System::Object obj”定义一个object类吗?

没有告诉 Protobuf 网络序列化 System.Object 但仍然出现错误:没有为类型定义序列化程序:System.Object

对象(通用)的 Protobuf-net 序列化抛出错误没有为类型定义序列化程序:System.Object

NET基础:类型基础