无法定义使用“动态”的类或成员,因为编译器需要类型“System.Runtime.CompilerServices.DynamicAttribute”

Posted

技术标签:

【中文标题】无法定义使用“动态”的类或成员,因为编译器需要类型“System.Runtime.CompilerServices.DynamicAttribute”【英文标题】:Cannot define a class or member that utilizes 'dynamic' because the compiler required type 'System.Runtime.CompilerServices.DynamicAttribute' 【发布时间】:2015-10-24 00:47:50 【问题描述】:

我正在尝试在从 GitHub 获取的本地计算机上运行 .NET MVC 应用程序。

当我在 Visual Studio 上运行时,一切正常,并打开一个新的浏览器窗口并显示错误:

CS1980:

同一窗口中的编译器部分显示以下错误:

我在 google 上查了一下,this 似乎是同样的错误。

这个人自己使用的是动态类型,另一方面,我没有使用任何动态类型,这是由 .NET 的编译器自动生成的,我使用的是应该支持动态的 .net 4.5。

我尝试应用相同的解决方案(将所有 System.Core 引用更改为 4.0) 但问题是它们都已经是 4.0 版了。

你知道我该如何解决这个问题吗?

【问题讨论】:

David,所有项目都针对 4.5 框架(项目 -> 属性 -> 应用程序 -> 目标框架) 你能给我们一个链接到有问题的 GitHub 项目吗? 您能否检查完整的编译错误(黄色图像只是部分),以确定什么是 CSC.EXE 完整命令行(参考是 r:/ 参数等) 请给我们代码或者 Github 项目链接,我们可以自己测试。很可能,您以某种方式定位了错误的 NET 框架 重新启动 Visual Studio 对我有用。 【参考方案1】:

我在尝试迁移的项目中遇到了类似的错误。尝试将项目的框架重新定位到一个或两个版本,一旦找到没有出现错误的目标版本,就重新定位到最初遇到问题的版本。

我在一个针对 4.6.2 的网站项目中遇到了同样的错误,该项目引用了一些较旧的库,将其重新定位回 4.5.1 并解决了该错误。我立即重新定位回 4.6.2 并没有再次遇到错误。

【讨论】:

这对我有用,但我需要先关闭我的解决方案,然后才能在早期的框架中重建它。 这对我有用。 VS 2015。从框架 4.6 改回 4.5.2 再改回 4.6。好的。谢谢。 我不敢相信这行得通...我有几个其他 nuget 包在做同样的事情。视图将大部分运行,但 Visual Studio 中的错误列表充满了烦人的错误。 我尝试定位从 4 到 4.7 的所有框架,但这些重新定位都不适合我。【参考方案2】:

我遇到了同样的问题,但这里的答案都没有解决它,但确实为我指明了正确的方向。我想我没有将我机器上的 .NET 版本更新到较新的版本。安装后,我回滚了目标框架(如建议的那样),重新定位新框架,还做了一些额外的事情:

    通过在包管理器中运行重新安装所有包:

    update-package -reinstall

我还将我的项目与适用于 4.5 的项目进行了比较,并且这样做了:

    打开了我的项目文件并删除了所有“BCL”相关元素。 在项目的 NuGet 包管理器中卸载了所有“BCL”包(猜想不需要迁移到 4.5+...?) 删除了旧的软件包版本 System.Net.Http,由于某种原因没有更新(请参阅 web.config - 版本应该显示 oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0")。 必须重启VS。 重建解决方案。 错误现在消失了。 ;)

我为解决其他一些错误所做的另一件事是通过删除此处的所有文件来清除组件缓存:

C:\Users\USERNAME\AppData\Local\Microsoft\VisualStudio\14.0\ComponentModelCache\

[咆哮] 浪费了一整天的时间。感谢 MS 又偷走了我生命中的一天来解决不应该出现的毫无意义的问题。每次升级我总能得到一个惊喜,还有一个可爱的修复红鲱鱼的游戏。对于那些升级旧项目的人来说,发现这些冲突不会有什么坏处吗?当出现问题时,也许更好的错误跟踪?我怀疑它会那么困难。也许甚至像 AsmSpy 这样的东西,但更高级,内置到 VS 中? [/咆哮]

【讨论】:

我在这里尝试了完整的解决方案,顺便说一句,女巫花了很长时间,但没有运气,打开的 .cshtml 文件中仍然存在错误。 那是在 2016 年。今天可能会有很多差异,具体取决于项目类型、引用、VS 版本等。例如,我当时使用的是 2015 年。今天我用的是2017。 我在这里使用的是 2019 最新版本。好的,解决了。不知何故,我错过了 Web.Config 中的程序集 System.Core。再次添加后,关闭解决方案并再次打开,消息消失了。甚至认为 System.Dynamic.Runtime 没有被引用。我认为 Web.Config 包含在 System.Core 中获取的链接,但我不确定。总而言之,在下添加程序集System.Core就够了【参考方案3】:

在使用“传统”MVC 应用(不是新的 .NET Core / vNext 应用)更新到 VS2015.3 后几天,我突然收到此错误。

原来这个错误可能是一个完全的红鲱鱼

确保:

您根本没有遇到任何其他错误 您已检查输出窗口中是否有任何未显示在“输出”窗口中的错误。 确保您没有任何conflicting references

在我的情况下,我遇到了一个导致错误的打字稿错误,并且由于某种原因也触发了这个奇怪的“红鲱鱼”动态错误。

我的解决方法是进入 .csproj 文件并将 typescript 工具版本更新为 1.8(需要卸载项目并手动编辑)。正如我所说,这与错误无关,但我提到了细节,因为其他人最终可能会遇到同样的问题。

我相信 1.7 不接受 typescript 模块系统的“无”,而 1.8 接受,因此出现错误。

【讨论】:

更新 3 也让我很头疼。感谢您的信息【参考方案4】:

添加对System.Dynamic.Runtime 的引用为我做了。

【讨论】:

使用 .NET 4.6.2 也为我工作。无法在(强制转换的)IEnumerables 上使用 linq 语句。【参考方案5】:

VS 2019 看到这个。我排除并重新包含了有问题的文件(在我的情况下为 _Layout.cshtml)并解决了问题。

【讨论】:

这没有提供问题的答案。一旦你有足够的reputation,你就可以comment on any post;相反,provide answers that don't require clarification from the asker。 - From Review 我不同意你的观点。我的解决方案在我的情况下有效,并且作为一个选项/可能性提供给任何可能像我一样通过谷歌搜索偶然发现这个线程的人。如果我的解决方案是错误的,那么 brichins' 也是如此,这基本上是一样的,我看不到你在唠叨那个人。 在开发中我们经常会遇到红鲱鱼错误,尤其是在编译时。对于许多看到我怀疑这个错误的人来说,这是其中一种情况。这实际上确实解决了问题,即使它间接起作用。【参考方案6】:

我犹豫要不要写这个作为答案,但对我来说,错误出现在 .cshtml 文件中。我关闭了页面,重新构建,错误消失了。总是最好先尝试简单的事情。

【讨论】:

【参考方案7】:

我遇到了同样的错误,我的数据库集中只有 2 个未使用的表需要删除。我想知道为什么当我在自动生成的代码工作中手动更改某事时它会起作用,但在删除后它起作用了。

因此请注意,此类不一致也会导致此错误。

【讨论】:

【参考方案8】:

我的解决方案是在 Views 文件夹下的 web.config 中更正 MVC 的版本。例如。该项目引用了 MVC 程序集版本 5.2.2.0,但在 Views/web.config 文件中是版本 5.2.4.0(见图)。

Image

【讨论】:

对我来说同样的解决方案。【参考方案9】:

尝试了其他一些没有运气的答案,但总体共识似乎是缓存的构建工件或编译器状态或其他东西存在某种问题。这对我有用:

删除问题.cshtml文件,看错误消失 开源控制和恢复删除

【讨论】:

【参考方案10】:

这个错误会因为你的解决方案参考文件夹中的Sitecore.Web.Mvc.Dll版本不同(项目名称->参考->Sitecore.Web.Mvc->右键单击并检查属性)和版本视图文件夹中的 Web.Config 中的 Sitecore.Web.Mvc.Dll。

要解决此错误,您必须确保两个文件夹中的 Sitecore.Web.Mvc.Dll 版本相同。

谢谢。

【讨论】:

这对现有答案没有任何新的贡献。 这不是一个新的贡献,但这是针对此错误的非常清晰且有效的解决方案。【参考方案11】:

就我而言,我固定在包管理器控制器上运行命令行“update-package -reinstall”。

【讨论】:

【参考方案12】:

我的问题出在 _Layout.cshtml 中。 上述解决方案都没有对我有用。我在这个项目中使用 VS2017,升级后遇到了相同的消息。

我在 1 条评论中注释掉了 2 行 @* *@

我的解决方案是单独注释掉每一行。多么神秘!

为此浪费了几个小时。

【讨论】:

以上是关于无法定义使用“动态”的类或成员,因为编译器需要类型“System.Runtime.CompilerServices.DynamicAttribute”的主要内容,如果未能解决你的问题,请参考以下文章

Java 泛型总结

编译器无法识别实现文件中的类成员函数类型但在接口文件中识别

在Java中使用预定义的类名作为类或变量名称

模板类无法编译通过,谁能帮我解释

内部类

扩展1