无法定义使用' dynamic'的类或成员。因为编译器需要类型&System; Run.Runtime.CompilerServices.DynamicAttribute'

时间:2015-08-01 11:41:52

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

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

当我在Visual Studio上运行时,一切都符合,并打开一个新的浏览器窗口,其中包含错误:

  

CS1980:无法定义使用' dynamic'的类或成员。因为编译器需要类型' System.Runtime.CompilerServices.DynamicAttribute'

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

enter image description here

我已经在谷歌上查了一下,this似乎也是同样的错误。

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

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

你知道我怎么解决这个问题?

12 个答案:

答案 0 :(得分:24)

我在尝试迁移的项目上遇到了类似的错误。尝试将项目框架重新定位回一两个版本,一旦找到目标版本而没有收到错误,请重新定位回原来遇到问题的版本。

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

答案 1 :(得分:8)

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

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

确保:

  • 您没有任何其他错误
  • 您已在输出窗口中检查了“输出”窗口中未显示的任何错误。
  • 确保您没有conflicting references

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

enter image description here

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

我认为1.7对于打字稿模块系统不接受'None',而1.8则不接受,因此错误。

答案 2 :(得分:6)

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

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

    update-package -reinstall

  2. 我还将我的项目与4.5工作的项目进行了比较并完成了这项工作:

    1. 打开我的项目文件并删除所有" BCL"相关要素。
    2. 全部卸载" BCL"在项目的NuGet包管理器中打包(猜测它不需要移动到4.5 + ......?)
    3. 删除了System.Net.Http的旧包版本,由于某种原因没有更新(请参阅web.config - 版本应显示oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0")。
    4. 必须重启VS。
    5. 重建解决方案。
    6. 错误现在消失了。 ;)
    7. 我解决其他一些错误的另一件事是通过删除此处的所有文件来清除组件缓存:

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

      [rant]用这一切浪费了一整天。感谢MS因为偷了我生命中的另一天而修复了永远不会出现的毫无意义的问题。每次升级我总会得到一个惊喜,一个可爱的游戏,修复红鲱鱼。为那些升级旧项目的人发现这些冲突会不会受到伤害?当出现问题时,或许更好的错误跟踪?我怀疑那会很困难。也许甚至像AsmSpy这样的东西,但更高级,内置于VS? [/咆哮]

答案 3 :(得分:5)

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

答案 4 :(得分:1)

我有同样的错误,我的数据库集中只有两个未使用的表需要删除。我不知道为什么当我在自动生成的代码中手动更改某项但删除后仍然有效时,它为什么起作用。

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

答案 5 :(得分:1)

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

  • 删除问题.cshtml文件,观看错误消失
  • 开源控件并还原删除

答案 6 :(得分:1)

VS 2019中看到了这一点。我排除并重新添加了有问题的文件(在我的情况下为_Layout.cshtml),从而解决了该问题。

答案 7 :(得分:0)

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

Image

答案 8 :(得分:0)

对于我来说,我已修复在程序包管理器控制程序上运行命令行“ update-package -reinstall”。

答案 9 :(得分:0)

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

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

我的解决方案是分别注释掉每行。真是个谜!

为此损失了几个小时。

答案 10 :(得分:0)

我犹豫将其写为答案,但对我来说,该错误出现在.cshtml文件中。我关闭页面,进行了重建,错误消失了。始终最好先尝试简单的事情。

答案 11 :(得分:-1)

此错误将因解决方案参考文件夹中的Sitecore.Web.Mvc.Dll版本不同(项目名称->参考-> Sitecore.Web.Mvc->右键单击并检查属性)以及版本不同而出现视图文件夹中Web.Config中的Sitecore.Web.Mvc.Dll。

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

感谢。