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


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.