【问题标题】:"Missing compiler required member" error being thrown multiple times with almost no changes to code多次抛出“缺少编译器所需成员”错误,几乎没有更改代码
【发布时间】:2011-09-05 04:11:32
【问题描述】:

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

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

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

除了this guys 解决方案和一些 Mono 项目错误的引用(我没有使用 Mono),我在 SO 或 Google 上没有找到很多关于此错误的信息。上面给出的解决方案需要添加一个类定义,允许编译器解析引用。我不是特别想这样做,因为直到此时我才需要这样做,它只会弄乱我的代码。

只是好奇之前是否有人遇到过这个问题。提前致谢!

【问题讨论】:

  • 似乎您使用的是 C# 3.0 编译器,但针对 .NET Framework 2.0 进行编译。检查您的程序集参考。

标签: c# asp.net-mvc


【解决方案1】:

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

【讨论】:

  • 解决了问题。
  • 我的问题是在使用动态和 Expando 对象的单元测试中。引用 Microsoft.CSharp 是诀窍。谢谢!
  • 我在 .NetStandard 类库中有动态类型 NewtonSoft 等: `` string weatherjson = await GetAsync(url);动态 obj = JsonConvert.DeserializeObject(weatherjson);动态温度 = obj.main.temp; ``` 我为 Microsoft.CSharp 进行了 Nuget 搜索并安装了它。库现在构建:) 问:我可以在 Linux 应用程序中使用这个 .NetStandard 库吗,给定 Microsofct 参考?
  • 谢谢!出于某种原因,这对我来说从消息中并不明显!我正在调整一个很久以前编写的项目,而这个参考资料令人恐惧。让人欣赏我通常使用的 Java 的相对清晰性。
【解决方案2】:

我不知道其他人是否遇到过这种情况,但是在添加了一些使用 dynamic 类型的代码并将 WebAPI 合并到一个起源于 VS2013 中的 TypeScript 应用程序的项目中之后,我突然遇到了这个错误。只需添加对 Microsoft.CSharp 的引用即可解决我的问题。

希望这对其他人有所帮助。

【讨论】:

  • 这正是我的问题。添加动态神秘地破坏了项目。
  • 对我来说也一样,使用.NetStandard2.0动态,我必须安装C# Nuget才能编译
【解决方案3】:

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

对于几乎重复的问题,请参阅Error when using extension methods in C#

【讨论】:

  • 事实证明,我从不再使用的程序集 (Azure) 中获得了错误的引用。我不认为 Azure 程序集是针对 .Net 2.0 编译的,但删除它可以解决问题。我不确定为什么会随机出现,因为我在相当长的一段时间内都没有触及任何与我的程序集或 .Net 版本(4.0)相关的东西。唉,感谢您为我指明了正确的方向。
  • Unity3D 默认将编译器设置为 .NET 2(在撰写本文时)。在播放器设置中,将其更改为较新的 .NET 版本以解决此问题。
【解决方案4】:

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

问题解决了!!!

【讨论】:

  • 对我来说也是一样,Newton.Json.Net dll 导致了问题!
  • 在我的情况下,原因是微软的 AntiXSSLibrary.dll 的 NET20 版本错误。替换为 NET35 - 错误消失了。
【解决方案5】:

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

namespace System.Runtime.CompilerServices
{
    public class ExtensionAttribute : Attribute { }
}

上面的代码允许 .NET 2.0 程序集使用扩展方法(请参阅Using extension methods in .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 { }
}

【讨论】:

  • 这段代码你在哪里写的?您在项目的根目录中创建了一个类?
  • @Alex 我使用代码 aboce 在我的项目的根目录中添加了一个名为 CompilerService 的类,并且它起作用了。不错!
【解决方案7】:

从 .NET 4.0 项目引用的 NLog.dll 2.0 也可能导致此问题。

【讨论】:

  • 从 .NET 3.5 引用的 .NET 2.0 的 NLog 似乎给出了类似的错误。
【解决方案8】:

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

【讨论】:

    【解决方案9】:

    我没有正确的解决方案,但我会添加我的数据点:

    在我的情况下,错误是由引用 GoogleSearchAPINet20 引起的

    会发生什么:

    • 我关闭构建的解决方案
    • 我再次打开解决方案。它仍在构建
    • 一旦我进行任何更改并尝试构建,我就会收到 19 个“缺少编译器所需的成员 ...”错误
    • 我删除了对 GoogleSearchAPINet20 的引用
    • 我添加了对 GoogleSearchAPINet20 的引用
    • 我构建解决方案。它构建没有错误
    • 现在只要我的 Visual Studio 处于打开状态,我就可以使用解决方案正确更改代码、构建或执行任何其他操作
    • 我关闭了 Visual Studio
    • 从第一步开始重复

    我的解决方案中根本没有引用 System.Core.dll,我的目标框架是 .NET 4。

    此时我有点生气……

    【讨论】:

      【解决方案10】:

      尝试对 .NET 4.0 使用异步任务时遇到此错误。将 Target Framework 更新到 4.5.2 解决了这个问题。

      【讨论】:

        【解决方案11】:

        在向 winforms 项目添加一些异步方法后,我遇到了相同的异常集。我需要将我的 .NET 版本从 4 提升到 4.5

        【讨论】:

          【解决方案12】:

          对我来说,当我在我的 .net4.0 项目中添加带有异步任务等待的异步方法时,就会出现问题!

          对于以前版本的 .NET-Framework 4.5,您必须安装此包:

          Install-package Microsoft.Bcl.Async –pre
          

          Install-Package Microsoft.CompilerServices.AsyncTargetingPack
          

          有关NugetNuget 的更多信息

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-11-28
            • 2011-05-20
            • 2011-09-26
            • 2017-10-03
            相关资源
            最近更新 更多