"丢失编译器所需成员"错误被多次抛出,几乎没有更改代码

jam*_*rio 80 c# asp.net-mvc

今天在对我运行的C#MVC站点进行了一些更改之后,我又回去做了一些修改并遇到了这个错误:

缺少编译器需要成员System.Runtime.CompilerServices.ExtensionAttribute..ctor

错误有点模糊(显然除了它的描述),因为它没有给我一个文件,行或列来引用,只有项目.此外,它总共抛出错误20次.在我部署的时间(当时完全正常运行)和现在之间,我只对代码进行了三次更改.我恢复了我的更改,它仍然抛出了同样的错误,这对我来说毫无意义.

我没有在SO或Google上找到关于此错误的大量信息,除了这个家伙解决方案和一些Mono项目错误(我没有使用Mono).上面给出的解决方案需要添加一个类定义,允许编译器解析引用.我并不特别想这样做,因为在此之前我不需要这样做,这会让我的代码变得混乱.

只是好奇,如果有人之前遇到过这个问题.提前致谢!

Mik*_*ike 200

在我的情况下,这是因为该项目没有引用Microsoft.CSharp.一旦我添加了对该程序集的引用,它就编译得很好.

  • 我的问题是在使用动态和Expando对象的单元测试中.引用Microsoft.CSharp就是诀窍.谢谢! (12认同)
  • 这对我来说似乎也有用. (3认同)
  • 解决了这个问题. (3认同)
  • 我在 .NetStandard 类库中有动态类型 NewtonSoft 等: ``` string Weatherjson = wait GetAsync(url); 动态 obj = JsonConvert.DeserializeObject(weatherjson); 动态温度 = obj.main.temp; ``我对 Microsoft.CSharp 进行了 Nuget 搜索并安装了它。库现已构建:) 问:鉴于 Microsoft 参考,我可以在 Linux 应用程序中使用此 .NetStandard 库吗? (2认同)

H B*_*yce 79

我不知道是否有其他人经历过这个,但是我在使用dynamic类型添加一些代码并将WebAPI合并到一个源自VS2013中的TypeScript应用程序的项目后突然陷入此错误.只需添加对Microsoft.CSharp的引用即可解决我的问题.

希望这有助于其他人.

  • 这正是我的问题.动态加入神秘地打破了这个项目. (3认同)
  • 对我来说也是如此,在 .NetStandard2.0 中使用动态,我必须安装 C# Nuget 才能编译 (3认同)

Rob*_*evy 23

此错误通常意味着您的项目正在针对.NET 2.0进行编译,或者您没有引用正确版本的System.Core.dll

有关近似重复的问题,请参阅在C#中使用扩展方法时出现错误


Bat*_*mer 17

我今天也遇到了这种情况.就我而言,我在.NET 4.0应用程序中引用了Newton.Json.Net dll v3.5.我意识到我甚至没有使用这个库,因此一旦我从我的引用中删除它,它就不再给我编译错误了.

问题解决了!!!

  • 对我来说,Newton.Json.Net dll引起了这个问题! (2认同)

Con*_*ole 7

实际错误来自导致错误的2.0程序集包含此代码的事实:

namespace System.Runtime.CompilerServices
{
    public class ExtensionAttribute : Attribute { }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码允许.NET 2.0程序集使用扩展方法(请参阅在.NET 2.0中使用扩展方法?).虽然如果您以.NET 4.0为目标并引用2.0程序集(包含上面的代码),它会混淆编译器,因为mscorlib.dll(4.0)在同一名称空间中包含相同的类.

我修好了

  • 通过再次编译原始2.0程序集而不使用4.0的属性
  • 通过移除组件(显然)
  • 通过在您编译的目标中添加第三个扩展属性(它似乎否决了引用的定义)


小智 6

在项目中的某处编写此代码可能会解决您的问题.这个对我有用

namespace System.Runtime.CompilerServices
{
    public class ExtensionAttribute : Attribute { }
}
Run Code Online (Sandbox Code Playgroud)


Tow*_*hin 6

dynamic可能您在 .NetStandard 类库项目中使用关键字。Microsoft.CSharp如果是这样,您需要在项目中添加对库的引用。希望它能解决您的问题。