"컴파일러 필수 멤버 누락"오류가 거의 코드 변경없이 여러 번 발생 함


94

오늘 내가 실행하는 C # MVC 사이트에 몇 가지 변경 사항을 배포 한 후 다시 몇 가지 수정을 수행 한 후이 오류가 발생했습니다.

누락 된 컴파일러 필수 멤버 System.Runtime.CompilerServices.ExtensionAttribute..ctor

오류는 파일, 줄 또는 참조 할 열을 제공하지 않고 프로젝트 만 제공하므로 약간 모호합니다 (분명히 설명이 아닙니다). 또한 총 20 회 오류를 발생시킵니다. 배포 한 시점 (당시에는 완전히 작동 함)과 지금 사이에 코드를 세 번만 변경했습니다. 변경 사항을 되돌 렸지만 여전히 똑같은 오류가 발생하여 의미가 없습니다.

나는 이 사람들의 솔루션과 일부 Mono 프로젝트 오류에 대한 몇 가지 참조를 제외하고 SO 또는 Google 에서이 오류에 대한 많은 정보를 찾지 못했습니다 (Mono를 사용하지 않습니다). 위의 솔루션은 컴파일러가 참조를 해결할 수 있도록 클래스 정의를 추가해야합니다. 이 시점까지 할 필요가 없었고 코드가 흐트러 질 것이기 때문에 특별히하고 싶지는 않습니다.

누군가이 전에 이것을 경험했는지 궁금합니다. 미리 감사드립니다!


1
C # 3.0 컴파일러를 사용하고 있지만 .NET Framework 2.0에 대해 컴파일하는 것 같습니다. 어셈블리 참조를 확인하십시오.
— dtb

답변:


27

이 오류는 일반적으로 프로젝트가 .NET 2.0에 대해 컴파일 중이거나 올바른 버전의 System.Core.dll을 참조하지 않음을 의미합니다.

거의 중복되는 질문 은 C #에서 확장 메서드를 사용할 때 오류를 참조하세요 .


실제로 더 이상 사용하지 않는 어셈블리 (Azure)에서 잘못된 참조가있는 것으로 나타났습니다. Azure 어셈블리가 .Net 2.0에 대해 컴파일되었다고 생각하지 않지만 제거하면 문제가 해결되었습니다. 나는 내 어셈블리 또는 .Net 버전 (4.0)과 관련된 것을 꽤 오랫동안 건드리지 않았기 때문에 이것이 왜 무작위로 생겨 났는지 잘 모르겠습니다. 아아, 올바른 방향으로 안내해 주셔서 감사합니다.
— jamesmillerio

Unity3D는 기본적으로 컴파일러를 .NET 2로 설정합니다 (작성 당시). 플레이어 설정에서이 문제를 해결하려면 최신 .NET 버전으로 변경하십시오.
— Shadow

230

제 경우에는 프로젝트가 참조하지 않았기 때문 Microsoft.CSharp입니다. 해당 어셈블리에 대한 참조를 추가하면 제대로 컴파일되었습니다.


3
문제를 해결했습니다.
— Anton Lyhin 2016

16
내 문제는 동적 및 Expando 개체를 사용하는 단위 테스트였습니다. Microsoft.CSharp를 참조하는 것이 트릭이었습니다. 감사!
— realPT

1
.NetStandard 클래스 라이브러리에 동적 유형 NewtonSoft 등이 있습니다.```string weatherjson = await GetAsync (url); 동적 obj = JsonConvert.DeserializeObject (weatherjson); 동적 온도 = obj.main.temp; ```Microsoft.CSharp 용 Nuget Search를 수행하고 설치했습니다. 라이브러리는 이제 빌드됩니다. Q. Microsofct 참조가 주어지면 Linux 앱에서이 .NetStandard 라이브러리를 사용할 수 있습니까?
— David Jones

감사합니다! 어떤 이유로 이것은 메시지에서 나에게 분명하지 않았습니다! 오래 전에 작성된 프로젝트를 수정하고 있는데이 참조 자료는 무섭습니다. 내가 일반적으로 사용하는 Java의 상대적 명확성을 높이 평가합니다.
— Tuntable

82

다른 사람이 이것을 경험했는지는 모르지만 dynamic유형을 활용하는 코드를 추가 하고 VS2013에서 TypeScript 응용 프로그램으로 시작된 프로젝트에 WebAPI를 통합 한 후 갑자기이 오류 가 발생합니다. Microsoft.CSharp에 대한 참조를 추가하기 만하면 문제가 해결되었습니다.

이것이 다른 사람에게 도움이되기를 바랍니다.


3
이것은 정확히 내 문제였습니다. 동적으로 추가하면 프로젝트가 중단되었습니다.
— SouthShoreAK

2
나에게도 .NetStandard2.0과 함께 dynamic을 사용하여 컴파일을 위해 C # Nuget을 설치해야했습니다.
— Mahmoud Hanafy 19

17

오늘도 이런 상황에 부딪 혔습니다. 제 경우에는 .NET 4.0 응용 프로그램에서 Newton.Json.Net dll v3.5를 참조했습니다. 이 라이브러리를 사용하지 않았기 때문에 참조에서 제거하면 더 이상 컴파일러 오류가 발생하지 않습니다.

문제 해결됨!!!


2
나에게도 Newton.Json.Net dll이 문제를 일으켰습니다!
— Julien Pierre

제 경우에는 Microsoft AntiXSSLibrary.dll의 잘못된 NET20 버전이 그 이유였습니다. NET35로 대체-오류가 사라졌습니다.
— Denis

7

실제 오류는 오류를 일으키는 2.0 어셈블리에 다음 코드가 포함되어 있다는 사실에서 비롯됩니다.

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

위의 코드를 사용하면 .NET 2.0 어셈블리에서 확장 메서드를 사용할 수 있습니다 ( .NET 2.0에서 확장 메서드 사용? 참조 ). mscorlib.dll (4.0)이 동일한 네임 스페이스에 동일한 클래스를 포함하므로 .NET 4.0을 대상으로하고 2.0 어셈블리 (위 코드 포함)를 참조하는 경우 컴파일러를 혼동합니다.

나는 이것을 고쳤다

  • 4.0을 대상으로하는 특성없이 원래 2.0 어셈블리를 다시 컴파일하여
  • 어셈블리를 제거하여 (분명히)
  • 컴파일하는 대상에 세 번째 확장 속성을 추가하여 (참조 된 정의를 무시하는 것 같습니다)

이것은 정확히 내 문제입니다. 귀하의 지침을 시도하고 다시 게시하겠습니다.
— John Peters

6

프로젝트 어딘가에이 코드를 작성하면 문제가 해결 될 수 있습니다. 그것은 나를 위해 작동합니다

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

이 코드를 어디에 작성합니까? 프로젝트 루트에 클래스를 만들었습니까?
— Alex

1
@Alex 나는 코드 aboce를 사용하여 CompilerService라는 클래스를 내 프로젝트의 루트에 추가했으며 작동했습니다. 좋은!
— Halvard

4

.NET 4.0 프로젝트에서 참조 된 NLog.dll 2.0도이 문제를 일으킬 수 있습니다.


.NET 3.5에서 참조 된 .NET 2.0 용 NLog는 비슷한 오류를 제공하는 것 같습니다.
— 페드로

3

아마도 dynamic.NetStandard Class 라이브러리 프로젝트에서 키워드 를 사용 합니다. 그렇다면 Microsoft.CSharp프로젝트의 라이브러리에 대한 참조를 추가해야합니다 . 문제가 해결되기를 바랍니다.


2

올바른 솔루션이 없지만 데이터 포인트를 추가하겠습니다.

제 경우에는 GoogleSearchAPINet20을 참조하여 오류가 발생했습니다.

다음은 발생합니다.

  • 빌드하는 솔루션을 닫습니다.
  • 솔루션을 다시 엽니 다. 여전히 빌드
  • 변경하고 빌드를 시도하자마자 19 개의 "Missing compiler required member ..."오류가 발생합니다.
  • GoogleSearchAPINet20에 대한 참조를 제거합니다.
  • GoogleSearchAPINet20에 대한 참조를 다시 추가합니다.
  • 솔루션을 구축합니다. 오류없이 빌드됩니다.
  • 이제 Visual Studio가 열려있는 한 코드를 변경하고 솔루션으로 다른 작업을 올바르게 빌드하거나 수행 할 수 있습니다.
  • Visual Studio를 닫습니다.
  • 1 단계부터 반복

내 솔루션에서 System.Core.dll을 전혀 참조하지 않으며 대상 프레임 워크는 .NET 4입니다.

나는이 시점에서 약간 짜증이 난다.


1

.NET 4.0에 대해 비동기 작업을 사용하려고 할 때이 오류가 발생했습니다. 대상 프레임 워크를 4.5.2로 업데이트하면 문제가 해결되었습니다.


1

winforms 프로젝트에 몇 가지 비동기 메서드를 추가 한 후 동일한 예외 집합이 발생했습니다. .NET 버전을 4에서 4.5로 올려야했습니다.


0

나를 위해 .net4.0 프로젝트에서 비동기 작업이 대기하는 비동기 메서드를 추가하면 문제가 발생합니다!

이전 버전의 .NET-Framework 4.5에서는 다음 패키지를 설치해야합니다.

Install-package Microsoft.Bcl.Async –pre

또는

Install-Package Microsoft.CompilerServices.AsyncTargetingPack

Nuget 또는 Nuget 에 대한 자세한 정보

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.