预定义类型“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"
【问题讨论】:
你可以同时删除aspnet50
和 aspnetcore50
,它们在 beta3 中被重命名为 dnx/dnxcore 之类的,现在已经没用了(除非它们以某种方式干扰其他的,如果是这样的话,它们都是无用且有害)。
去掉这两个,错误列表减少到450,越来越好!
【参考方案1】:
删除 bin
和 obj
并重建。
【讨论】:
谢谢你的工作,我还需要卸载和重新加载项目。 救命稻草。我在 docker 容器中遇到了这个问题 请说明当有人删除这些文件夹时可能会发生什么变化? 这对我有用一次,然后@Tharindu Jayasinghe 的回答对我有用...... 此外,我必须在之后清理和构建解决方案。【参考方案2】:这浪费了我很多时间。关闭视觉工作室。删除 .vs 文件夹并重新启动 Visual Studio。一切都应该正常。
这通常发生在您更改分支或合并分支时。
【讨论】:
我的 applicationhot.config 文件中有一些我不想丢失的东西,所以我所做的就是关闭 VS,删除 .suo 文件,然后重新启动 VS,这对我也有用. 快速、美观、安静 一个类似的解决方案为我解决了这个问题 - 我已经从.vs
目录中删除了 DesignTimeBuild
目录(符号缓存)(删除 .suo 文件会丢失解决方案级别的设置、断点等)。当然,我还删除了bin
和obj
目录。手动将项目转换为新型 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 安装程序修复。 没有错误。 移除 bin 和 obj 和 rebuild。
在包管理器控制台上运行dotnet restore
命令并解决问题。
【讨论】:
【参考方案10】:VS2019 解决方案文件被放置在一个驱动器文件夹下,移动到一个驱动器之外的另一个文件夹,修复了这个问题。
【讨论】:
【参考方案11】:对我来说,当我向我的解决方案中添加一个新项目时,问题就出现了。我重新构建了解决方案,错误消失了。
【讨论】:
【参考方案12】:就我而言,这是不同的。 首先检查 System.Runtime 引用是否添加到您的项目中。如果将其添加到您的项目中,请按照以下步骤操作。
-
从您的项目中打开您的参考并选择 System.Runtime 程序集。
右键单击 System.Runtime 并选择属性。
将 SpecificVersion 的值从 False 更改为 True。
注意:就我而言,我使用的是 Visual Studio 2019 和 Project 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